Web Service 异步调用
Web 服务描述语言工具从 WSDL 协定文件、XSD 架构和 .discomap 发现文档为 XML Web services 和 XML Web services 客户端生成代码。
wsdl [options] {URL | path}
如wsdl /n:MyMath http://localhost/mathservice.asmx 即一个对asmx进行了封装调用的cs文件。在各项目中可引用这个cs调用asmx服务。
这个cs的封装调用自动提供同步、异步调用方法,如除了有Add(Invoke)方法外,还有BeginAdd(BeginInvoke)方法和EndAdd(EndInvoke)方法,以及AddAsync方法。
public System.IAsyncResult BeginAdd(double x, double y, System.AsyncCallback callback, object asyncState)
进行异步调用时的两种方式:
1. 在开始异步调用时提供回调委托。
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
Begin
public void Results(IAsyncResult asyncResult)
{
XXX. EndAdd(asyncResult);
}
public void Work()
{
Object state = new Object();
AsyncCallback callback = new Callback(this.Results);
IAsyncResult asyncResult =XXX. BeginAdd(x,y,callback, state);
}
2. 在开始异步调用时不提供回调委托。
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
public void Work()
{
IAsyncResult asyncResult =XXX. BeginAdd(x,y,null, null);
XXX. EndAdd(asyncResult);
}
PS:
1.BeginInvoke函数的返回类型IAsyncResult正是EndInvoke的一个参数。
2.通常给要调用的方法建立一个委托引用然后使用delegate. BeginInvoke、AsyncWaitHandle.WaitOne()、delegate.AsyncWaitHandle.WaitOne()、delegate. EndInvoke
3. IAsyncResult.AsyncState中存有调用方法时的参数信息