WebServer 使用笔记
2007-12-29 22:34 Animax! 阅读(708) 评论(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 方法仅有两个可能的行为:它不参与事务(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();
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;
}
即使使用同一个对象,还是需要一个标识。
先研究到这里….

浙公网安备 33010602011771号