1) 由于个人能力有限,关于web service的异步方法调用写得不好,请大家见谅.
2) 希望大家真正去看web service的异步方法和做这方面程序.
异步方法的调用的机理:它是通过回调来完成。客户首先发送调用某一个服务的异步请
求,cpu不等待这个服务接着往下执行。当这个服务完成时候,服务器会通知客户事件完
成,调用回调函数处理返回结果。而在C#中,回调函数处理模型通过委托事件实现。进一
步说,在整个服务请求的过程中,客户端为这个异步要求创建一个线程,而线程一直等待
服务器的返回结果,而线程的处理函数就是客户端的委托的函数。
异步函数的说明:每一个异步服务至少包含三个比较重要的函数。这三个函数的名称分
别 Begin+同步函数名、 End+同步函数名和 同步函数名+sync ( 补充,同步函数名是
WebService类中的提供Web Service的函数名)。
第一个函数(以begin开头的函数)说明:
1)首先,用户可以传入一个事件委托者AsyncCallback(回调函数, 请参阅msdn)。
3)它将返回一个IAsyncResult接口,它存储了当前异步请求的状态信息。
第二个函数( 以End开头的函数 ) 说明:
1) 首先,它要求把第一个函数的返回值IAsyncResult当参数传入。
2) 它的返回值,即调用服务后的结果,为object对象,我们需要强制类型转化。
第三个函数( 同步函数+sync )说明:
1) 它要求传入调用服务必须的参数值
在程序中使用异步函数的过程:
1) 添加引用.不能够通过直接添加Web Reference实现。因为通过直接添加Web
Reference只能生成同步方法而不能生成异步方法。我们需要采用另外一种办法( 请参
照我前不久发的 " 关于Web Service 的见解",同时那些命令执行是在Visual studio
2005命令行中
(1) 通过开始菜单选中Microsoft visual studio 2005
(2) 在子菜单中选中 Visual studio Tools
(3) 在子菜单中选中 visual studio 2005 Command Prompt.
)
2) 选择是否使用回调函数。
由于,异步调用Web Service比较烦琐,我通过举一个简单的例子说明。在每一个Web
Service默认都有一个HelloWorld service。我们以它为例。
(1) 首先添加Web 引用,这个过程我们不再重复(请参照请参照我前不久发的帖子“
关于Web Service 的见解” 的添加引用第二种办法)
(2) 开启你的iis服务.
(3) 列举两种实现办法:
第一种:基于事件完成回调函数的。
class Program
{
static void Main(string[] args)
{
// 生成的代理类名字为Service
Service service = new Service();
service.HelloWorldCompleted += new
HelloWorldCompletedEventHandler(service_helloworldCompleted);
service.HelloWorldAsync();
// 防止主程序提前结束
Console.ReadLine();
}
private static void service_helloworldCompleted(object sender,
HelloWorldCompletedEventArgs args)
{
Console.WriteLine(args.Result.ToString());
}
}
第二种通过begin函数:
class Program
{
static void Main(string[] args)
{
Service service = new Service();
IAsyncResult result = service.BeginHelloWorld(null, null);
Object obj = service.EndHelloWorld(result);
Console.WriteLine(obj.ToString());
}
}