专栏首页张善友的专栏学习Altas 笔记[JS简单调用服务端方法]

学习Altas 笔记[JS简单调用服务端方法]

      在Ajax框架中,Asp.net方面最强当属Altas最强,以前使用AjaxPro.Net和MagicAjax. 最几个都比较好用。这几个月来Altas已经进入CTP版本,是开始学习研究Altas的时机了。准备利用Altas为 http://www.yupsky.com 开发成员之间在线通讯的类似于MSN这样的功能。今天初步的学习了一下Altas,最基础的学习内容就是使用javascript调用服务端代码。

     Altas和AjaxPro.Net类似,但比AjaxPro.Net强大很多。学习结果记录如下:

     程序的原型来自http://weblogs.asp.net/scottgu/archive/2005/09/14/425131.aspx,但是这个是beta版时候的教程。

     1、下载altas框架,到http://www.asp.net/default.aspx?tabindex=8&tabid=47上去下载,上面有很多内容

     2、使用VS2005创建一个WebSite或者Web Application.

     3、配置Web.config如下:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="microsoft.web" type="Microsoft.Web.Configuration.MicrosoftWebSectionGroup">
      <section name="converters" type="Microsoft.Web.Configuration.ConvertersSection" requirePermission="false" />
      <section name="webServices" type="Microsoft.Web.Configuration.WebServicesSection" requirePermission="false" />
      <section name="authenticationService" type="Microsoft.Web.Configuration.AuthenticationServiceSection" requirePermission="false" />
      <section name="profileService" type="Microsoft.Web.Configuration.ProfileServiceSection" requirePermission="false" />
    </sectionGroup>
  </configSections>
  
  <!-- 
      The microsoft.web section defines items required for the Atlas framework.
  -->
  <microsoft.web>
    <converters>
      <add type="Microsoft.Web.Script.Serialization.Converters.DataSetConverter"/>
      <add type="Microsoft.Web.Script.Serialization.Converters.DataRowConverter"/>
      <add type="Microsoft.Web.Script.Serialization.Converters.DataTableConverter"/>
    </converters>
    <webServices enableBrowserAccess="true" />
    <authenticationService enabled="true" />
    <!-- The example application needs the profileService to be enabled and to specify the dragOverlayPosition property. -->
    <profileService
      enabled="false" 
      setProperties="dragOverlayPosition" 
      getProperties="dragOverlayPosition" />
  </microsoft.web>

  <connectionStrings >
    <remove name="LocalSqlServer" />
    <add name="LocalSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|aspnetdb.mdf" />
    <add name="AltasMsn" connectionString="Data Source=localhost;user id=sa;password=;initial catalog=msn" providerName="System.Data.SqlClient"/>
  </connectionStrings>

  <system.web>

    <pages>
      <controls>
        <add namespace="Microsoft.Web.UI" assembly="Microsoft.Web.Atlas" tagPrefix="atlas"/>
        <add namespace="Microsoft.Web.UI.Controls" assembly="Microsoft.Web.Atlas" tagPrefix="atlas"/>
      </controls>
    </pages>

    <compilation debug="false">
      <buildProviders>
        <add extension=".asbx" type="Microsoft.Web.Services.BridgeBuildProvider" />
      </buildProviders>
    </compilation>
    
    <membership>
      <providers>
        <remove name="AspNetSqlMembershipProvider" />
        <add name="AspNetSqlMembershipProvider" 
                     type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
                     connectionStringName="LocalSqlServer" 
                     enablePasswordRetrieval="false" 
                     enablePasswordReset="true" 
                     requiresQuestionAndAnswer="false" 
                     applicationName="/" 
                     requiresUniqueEmail="false" 
                     passwordFormat="Hashed" 
                     maxInvalidPasswordAttempts="100" 
                     passwordAttemptWindow="10"
                     minRequiredPasswordLength="1" 
                     minRequiredNonalphanumericCharacters="0" 
                     passwordStrengthRegularExpression="" />
      </providers>
    </membership>
    
    <!-- The SimpleList application needs profile to be enabled, and to allow anonymous users access to the property. -->
    <profile enabled="false">
      <properties>
        <add allowAnonymous="true" name="dragOverlayPosition" defaultValue="" serializeAs="String" />
      </properties>
    </profile>

    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/>
      <add verb="*" path="*.asbx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/>
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="Microsoft.Web.Services.ScriptModule"/>
      <add name="BridgeModule" type="Microsoft.Web.Services.BridgeModule"/>
      <add name="WebResourceCompression" type="Microsoft.Web.Services.WebResourceCompressionModule"/>
    </httpModules>

        <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
        <authentication mode="Forms" />
        <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
    </system.web>
</configuration>

Step 1: 产生一个Web服务 推荐使用WebService  atlas使用webService时,对于webService并没有特殊要求

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Collections.Generic;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace AltasMsn
{
    /// <summary>
    /// Summary description for $codebehindclassname$
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class LapService : System.Web.Services.WebService
    {
        [WebMethod]
        public ProcessData[] GetProcesses()
        {

            return this.GetAllProcesses().ToArray();

        }


        [WebMethod]
        public ProcessData[] MatchProcesses(string expression)
        {

            List<ProcessData> data = this.GetAllProcesses();

            if (String.IsNullOrEmpty(expression))
            {

                return data.ToArray();

            }

            string[] words = expression.Split(' ');

            return data.FindAll(new Predicate<ProcessData>(delegate(ProcessData process)
            {

                return System.Text.RegularExpressions.Regex.IsMatch(process.Name, expression);

            })).ToArray();

        }



        private List<ProcessData> GetAllProcesses()
        {

            List<ProcessData> data = new List<ProcessData>();

            System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();

            foreach (System.Diagnostics.Process process in processes)
            {

                data.Add(new ProcessData(process.ProcessName, process.WorkingSet64, process.Threads.Count));

            }



            return data;

        }
        

    }



    public class ProcessData
    {

        private string _name;

        private long _workingSet;

        private int _threadCount;



        public string Name
        {

            get { return _name; }

            set { _name = value; }

        }



        public long WorkingSet
        {

            get { return _workingSet; }

            set { _workingSet = value; }

        }



        public long WorkingSetInMB
        {

            get { return _workingSet / (1024 * 1000); }

            private set { }

        }



        public int ThreadCount
        {

            get { return _threadCount; }

            set { _threadCount = value; }

        }



        public ProcessData() { }



        public ProcessData(string name, long workingSet, int threadCount)
        {

            _name = name;

            _workingSet = workingSet;

            _threadCount = threadCount;

        }

    }

}

这个服务用于查询当前系统中正在活动进程。 Step2 : Simple Invocation of the Web Service 使用很简单,使用Javascript调用远程服务。 页面代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SimapleAjax.aspx.cs" Inherits="AltasMsn.SimapleAjax" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
  <atlas:ScriptManager id="scriptManager1" runat="server">
    <Services>
        <atlas:ServiceReference Path="~/LapService.asmx" />
    </Services>
  </atlas:ScriptManager> 

  <script language="javascript" type="text/javascript"> 

        function Button1_onclick() {

            var text1 = document.getElementById("Text1");

            AltasMsn.LapService.MatchProcesses(text1.value, onSearchComplete);
        }      

        function onSearchComplete(results) {

            var searchResults = document.getElementById("searchResults");           

            for (var i=0; i<results.get_length(); i++) {
              searchResults.innerHTML += results[i].Name + "<br>";
            }
        }

  </script>

<body>
    <form id="form1" runat="server">
     <div id="logo">
      Process Explorer

    </div>
    <div id="header">
      Search:
      <input id="Text1" type="text" />
      <input id="Button1" type="button" value="Search" onclick="Button1_onclick();" />

    </div>
    <div id="content">
      <div class="left">
        <span id="searchResults"></span>
      </div>   
    </div>
    </form>
</body>
</html>

示例的结果如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自定义Unity对象生命周期管理集成ADO.NET Entity Framework

    在Unity中,从Unity 取得的实例为 Transient。如果你希望使用多线程方式,就需要在组成时使用lifecycle参数,这时候取出的组件就不再是同一...

    张善友
  • 使用 ServiceStack 构建跨平台 Web 服务

    本文主要来自MSDN杂志《Building Cross-Platform Web Services with ServiceStack》,Windows Com...

    张善友
  • Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft ...

    张善友
  • 腾讯正式开源 QMUI Web 前端框架!前言开发背景功能特性应用案例工程主页和源码地址开发者指南

    经过长时间的打磨迭代,QMUI Web 作为腾讯广研 QMUI 团队的一个开源项目,正式发布到 Tencent Github。QMUI Web 是一个 Web ...

    JackJiang
  • python|输出给定范围内的顺次数

    我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1 的整数。 请你返回由 [low, high] 范围内所有顺次数组成的有序 列表(从小到大排序)

    算法与编程之美
  • org.hibernate.MappingException: Could not determine type for: String, at table: Elec_SystemDDL, for

    qubianzhong
  • 介绍高维超参数调整 - 优化ML模型的最佳实践

    甚至最简单的算法像线性回归算法,找到超参的最优解集也是困难的。当涉及到深度学习算法,这件事会变得更艰难。

    AI研习社
  • 冲突管理感悟

    从1月计划考试开始,到6月中下旬,我都在复习PMP考试。尽管付出了不少时间,然而仍然不敢保证100%通过。但是在学习的过程中,PMBOK中的知识,却对我造成了极...

    温安适
  • 冲突管理感悟

    从1月计划考试开始,到6月中下旬,我都在复习PMP考试。尽管付出了不少时间,然而仍然不敢保证100%通过。但是在学习的过程中,PMBOK中的知识,却对我造成了极...

    温安适
  • 【Python】Python-pool的

    默认情况下,Pool会创建固定数目的工作进程,并向这些工作进程传递作业,直到再没有更多作业为止。

    用户2398817

扫码关注云+社区

领取腾讯云代金券