WebServer 使用笔记
2007-12-29 22:34 Animax! 阅读(705) 评论(1) 收藏 举报Web service  即是 XML Web service, 他作用在于提供一系列的过程给用户端使用. Web Service 能且只能传送XMl格式的数据 , 所以只要能被序列化的对象都能被传递。
建立Web Service :
在Vs.Net 上建立一个WebService和建立一个普通网站近乎一样 , 新建网站 -> 选择建立Asp.Net Web 服务。
成功建立 WebService 后会生成两个文件 , 一个是在网站下的 Service.asmx 页面文件
, 一个是在 App_Code 文件夹下的Service.cs 文件。
Service.asmx页面只有一句简单的代码:
<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service" %>
在浏览器上可以直接访问 Service.asmx 文件, Service.asmx 将显示出Service.cs里面暴露出来给客户端使用的方法,能传入”可见”的值(指字符、数值型等)并运行方法,用于简单的调试 WebService 。
打开Service.cs 文件,看到里面已经包含一份注释了的简单实例:
 [WebMethod]
    [WebMethod] public string HelloWorld()
    public string HelloWorld() {
    { return "Hello World";
        return "Hello World"; }
    }
这小段代码表示的方法,与普通的方法比较起来就是多了 ”[WebMethod]” 而已。
WebMethod是一个属性。当它被附加到 Public 方法表示希望将该方法公开为 XML Web services 的一部分,就表示可以从远程 Web 客户端调用该方法。
WebMethod属性 (Attribute) 提供以下属性 (Property):
BufferResponse:
WebMethod属性 (Attribute) 的 BufferResponse属性 (Property) 启用对 XML Web services 方法响应的缓冲。当设置为 true(默认设置)时,ASP.NET 在将响应向下发送到客户端之前对整个响应进行缓冲。缓冲非常有效,它通过最小化辅助进程和 IIS 进程之间的通信来帮助提高性能。当设置为 false 时,ASP.NET 以 16KB 的块区缓冲响应。通常,只有在不想将响应的全部内容一次缓冲到内存时,才将该属性 (Property) 设置为 false。例如,您在反写一个集合,该集合正在以流的形式从数据库输出其项。除非另外指定,默认值为 true。
CacheDuration: 获取或设置响应应在缓存中保留的秒数。
WebMethod属性 (Attribute) 的 CacheDuration属性 (Property) 启用对 XML Web services 方法结果的缓存。ASP.NET 将缓存每个唯一参数集的结果。该属性 (Property) 的值指定 ASP.NET 应该对结果进行多少秒的缓存处理。值为零,则禁用对结果进行缓存。除非另外指定,默认值为零。
Description: 描述 XML Web services 方法的描述性消息。
WebMethod属性 (Attribute) 的 Description属性 (Property) 提供 XML Web services 方法的说明,该说明将显示在服务帮助页上。除非另外指定,默认值为空字符串。
EnableSession: 指示是否为 XML Web services 方法启用会话状态。
WebMethod属性 (Attribute) 的 EnableSession属性 (Property) 启用 XML Web services 方法的会话状态。一旦启用,XML Web services 就可以从 HttpContext.Current.Session中直接访问会话状态集合,或者,如果它是从 WebService基类继承的,则可以使用 WebService.Session属性来访问会话状态集合。除非另外指定,默认值为 false。
MessageName: 在传递到 XML Web services 方法和从 XML Web services 方法返回的数据中用于 XML Web services 方法的名称。
WebMethod属性 (Attribute) 的 MessageName属性 (Property) 使 XML Web services 能够唯一确定使用别名的重载方法。除非另外指定,默认值是方法名称。当指定 MessageName时,结果 SOAP 消息将反映该名称,而不是实际的方法名称。
TransactionOption: 指示 XML Web services 方法的事务支持。
WebMethod属性 (Attribute) 的 TransactionOption属性 (Property) 使 XML Web services 方法可以作为事务的根对象参与。虽然可以将 TransactionOption属性 (Property) 设置为 TransactionOption枚举的任意值,但 XML Web services 方法仅有两个可能的行为:它不参与事务(Disabled、NotSupported、Supported)或它创建一个新事务(Required、RequiresNew)。除非另外指定,默认值为 TransactionOption.Disabled。
TransactionOption 枚举值:
Disabled:忽略当前上下文中的任何事务
指示 XML Web services 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下执行 XML Web services 方法。
              NotSupported :使用非受控事务在上下文中创建组件。 
              指示 XML Web services 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下执行 XML Web services 方法。
              Supported:如果事务存在,则共享该事务。
指示 XML Web services 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下创建 XML Web services。
Required:如果事务存在,则共享该事务;如有必要,则创建新事务。
指示 XML Web services 方法需要事务。由于 XML Web services 方法只能作为根对象参与事务,因此将为 XML Web services 方法创建一个新事务。
RequiresNew:使用新事务创建组件,而与当前上下文的状态无关。
指示 XML Web services 方法需要新事务。当处理请求时,将在新事务内创建 XML Web services。
WebService客户端:
在VS.Net IDE下添加WebService代理十分简单。只要在项目上右键,选择添加Web引用,键入WebService地址,键入引用名称即可。
Web引用添加完成后,网址下就多了App_WebReferences文件夹,此文件夹下也有一个文件夹,该文件夹以WebService的引用名来命名的。在该文件下,有3份文件以XML格式记录了连接到WebService地址和WebService的信息。
使用WebService提供的方法基本上和在调用本机的过程一样。
    例如,引用的WebService名称为localhost
 localhost.Service WebServices = new localhost.Service();
localhost.Service WebServices = new localhost.Service(); Console.WriteLine(WebServices.HelloWorld());
Console.WriteLine(WebServices.HelloWorld());这样就完成了一个简单的WebService使用。
WebService使用Session:
       在服务器端,使用Session和在普通Web上使用Session没有什么区别,只需要在WebMethod 属性上把EnableSession 属性设置成 True 。
服务器代码:
 [WebMethod(
    [WebMethod(
 EnableSession=true,
        EnableSession=true,
 Description = "设置Session"
        Description = "设置Session"
 )]
        )] public void SetSession(string Str)
    public void SetSession(string Str)
 {
    { Session["session"] = Str;
        Session["session"] = Str; }
    }
 [WebMethod(
    [WebMethod(
 EnableSession=true,
        EnableSession=true,
 Description = "读取Session"
        Description = "读取Session"
 )]
        )] public string GetSession()
    public string GetSession()
 {
    { return Session["session"].ToString();
        return Session["session"].ToString(); }
    }
在客户端,使用含有Session操作的WebService就需要使用一个Cookie集来存放服务端的Session标志。
客户端代码:
 /// <summary>
    /// <summary> /// 在WebService保存Session
    /// 在WebService保存Session /// </summary>
    /// </summary> CookieContainer SetSession(string Str)
    CookieContainer SetSession(string Str)   {
    { localService.Service Server = new localService.Service();
        localService.Service Server = new localService.Service(); CookieContainer CC = new CookieContainer();     // 创造一个CookieContainer 用于记录服务端标识
        CookieContainer CC = new CookieContainer();     // 创造一个CookieContainer 用于记录服务端标识 Server.CookieContainer = CC;
        Server.CookieContainer = CC; Server.SetSession(Str);
        Server.SetSession(Str); return CC;
        return CC; }
    }
 /// <summary>
    /// <summary> /// 取出在WebService保存的Session
    /// 取出在WebService保存的Session /// </summary>
    /// </summary> string GetSession(CookieContainer CC)
    string GetSession(CookieContainer CC) {
    { localService.Service Server = new localService.Service();
        localService.Service Server = new localService.Service(); Server.CookieContainer = CC; // 输入标识
        Server.CookieContainer = CC; // 输入标识 Server.GetSession();
        Server.GetSession(); }
 }
注意,那个标示是必须的。
 string Error(string Str)
string Error(string Str) {
    { localService.Service Server = new localService.Service();
        localService.Service Server = new localService.Service(); Server.SetSession(Str);
        Server.SetSession(Str); string GetStr = Server.GetSession(); //出错.
        string GetStr = Server.GetSession(); //出错. return GetStr;
        return GetStr; }
    }
即使使用同一个对象,还是需要一个标识。
先研究到这里….
 
                     
                    
                 
                    
                 
    
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号