代码改变世界

WebServer 使用笔记

2007-12-29 22:34  Animax!  阅读(702)  评论(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]
    
public string HelloWorld()
    
{
        
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 方法仅有两个可能的行为:它不参与事务(DisabledNotSupportedSupported)或它创建一个新事务(RequiredRequiresNew)。除非另外指定,默认值为 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();
Console.WriteLine(WebServices.HelloWorld());

这样就完成了一个简单的WebService使用。

WebService使用Session
       在服务器端,使用Session和在普通Web上使用Session没有什么区别,只需要在WebMethod 属性上把EnableSession 属性设置成 True

服务器代码:

   
    [WebMethod(
        EnableSession
=true,
        Description 
= "设置Session"
        )]
    
public void SetSession(string Str)
    
{
        Session[
"session"= Str;
    }


    [
WebMethod(
        EnableSession
=true,
        Description 
= "读取Session"
        )]
    
public string GetSession()
    
{
        
return Session["session"].ToString();
    }

       在客户端,使用含有Session操作的WebService就需要使用一个Cookie集来存放服务端的Session标志。

客户端代码:


    /// <summary>
    
/// 在WebService保存Session
    
/// </summary>

    CookieContainer SetSession(string Str)  
    
{
        localService.
Service Server = new localService.Service();
       
CookieContainer CC = new CookieContainer();     // 创造一个CookieContainer 用于记录服务端标识
        Server.CookieContainer = CC;
        Server.SetSession(Str);
        
return CC;
    }


    
/// <summary>
    
/// 取出在WebService保存的Session
    
/// </summary>

    string GetSession(CookieContainer CC)
    
{
        localService.
Service Server = new localService.Service();
        Server.CookieContainer 
= CC; // 输入标识
        Server.GetSession();
 }

注意,那个标示是必须的。

string Error(string Str)
    
{
       
localService.Service Server = new localService.Service();
        Server.SetSession(Str);
        
string GetStr = Server.GetSession(); //出错.
        return GetStr;
    }

 

即使使用同一个对象,还是需要一个标识。
先研究到这里
….