当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET创建XML Web服务全接触(10)

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET创建XML Web服务全接触(10)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 36 ::
收藏到网摘: n/a

异步Web服务(2)

    

  和XML Web服务异步地通讯

  和一个XML Web服务异步通讯遵循被Microsoft.NET Framework其它部分使用的异步设计模式。然而,在你取得那些细节之前,重要的是注意一个XML Web服务不必特意的写来处理用于异步调用的异步请求。你使用Wsdl.exe为你的客户端创建的代理类自动地创建用于异步调用XML Web服务方法的方法。即使只有一个XML Web服务方法的同步实现也是这样的。

  .NET Framework异步方法调用设计模式

  用于调用异步方法的设计模式,尤其是用于.NET Framework,针对每个同步方法分别有两个异步方法。对每个同步方法,都有一个Begin异步方法和一个End异步方法。Begin方法被客户端调用来开始方法调用。也就是说,客户端指示这个方法来开始处理方法调用,但是立即返回。End方法被客户端调用来取得XML Web服务方法调用执行的处理结果。

  一个客户端如何知道何时调用End方法?.NET Framework定义了两种方法来实现客户端判断其时间。第一种是传送一个回调函数到Begin方法,当方法已经完成处理的时候调用。第二个方法是使用WaitHandle类的一个方法来导致客户端等待方法完成。当一个客户端实现第二个方法,并且调用Begin方法,返回值不是XML Web服务方法指定的数据类型,而是一个实现IAsyncResult接口的类型。IAsyncResult接口包含一个WaitHandle类型的AsyncWaitHandle属性,实现支持等待同步对象变为带有WaitHandle.WaitOne、WaitAny和WaitAll标记的方法。当一个同步对象被标记的时候,它指示等待特定的资源的线程可以访问资源的。如果一个XML Web服务客户端使用wait方法仅仅异步地调用一个XML Web服务方法,那么它可以调用WaitOne来等待XML Web服务方法完成处理。

  重要的是注意不管客户端选择来与XML Web服务异步通讯的两种方法中的哪一种,SOAP消息发送和接收都与同步通信时吻合。也就是说,只有一个SOAP请求和SOAP响应通过网络发送和接收。代理类通过使用一个不同的线程而不是客户端用来调用Begin方法的线程来处理SOAP响应。因此,客户端可以继续执行线程上的其它的工作,而代理类处理接收和操作SOAP响应。

  实现一个产生异步的方法调用的XML Web服务客户端

  用于从使用ASP.NET创建的XML Web服务客户端产生一个到XML Web服务的异步调用的体系结构被嵌入.NET Framework和由Wsdl.exe构造的代理类中。用于异步调用的设计模式被.NET Framework定义,代理类提供和一个XML Web服务异步通信的机制。当一个用于XML Web服务的代理类被使用Wsdl.exe构造的时候,有三个方法分别被创建,用于XML Web服务中的公共XML Web服务方法。下面的表格描述那三个方法。

  代理类中的方法名 描述

  <NameOfWebServiceMethod> 同步发送用于名为<NameOfWebServiceMethod>的XML Web服务方法的消息。

  Begin<NameOfWebServiceMethod> 开始与名为<NameOfWebServiceMethod>的XML Web服务方法的异步消息通信。

  End<NameOfWebServiceMethod> 结束与名为<NameOfWebServiceMethod>的XML Web服务方法的异步消息通信,从XML Web服务方法中取得完成的消息。

  下面的代码示例是一个XML Web服务方法,它可能花费相对长的时间来完成处理。因此,当你应该设置你的XML Web服务客户端来异步地调用XML Web服务方法的时候,它是一个很好的示例。

[C#]
<%@ WebService Language="C#" Class="PrimeFactorizer" %>

using System;
using System.Collections;
using System.Web.Services;

class PrimeFactorizer {

 [WebMethod]
 public long[] Factorize(long factorizableNum){
  ArrayList outList = new ArrayList();
  long i = 0;
  int j;
  try{
   long Check = factorizableNum;

   //Go through every possible integer
   //factor between 2 and factorizableNum / 2.
   //Thus, for 21, check between 2 and 10.
   for (i = 2; i < (factorizableNum / 2); i++){
    while(Check % i == 0){
     outList.Add(i);
     Check = (Check/i);
    }
   }
   //Double-check to see how many prime factors have been added.
   //If none, add 1 and the number.
   j = outList.Count;
   if (j == 0) {
    outList.Add(1);
    outList.Add(factorizableNum);
   }
   j = outList.Count;

   //Re