在下面的操作(服务端)实现中,WCF框架如何处理AsyncState和AsyncCallback?
IAsyncResult BeginWork(<<Service call params>>, AsyncCallback callback, object state);我在试着理解
发布于 2013-04-02 07:43:12
.NET中有几种用于公开异步方法的设计模式。
这种使用BeginX和EndX方法的模式称为Asynchronous Programming Model
在这种模式中,您总是可以传递这两个额外的参数:
1) AsyncCallback callback是在操作完成时调用的委托。
2) object state是您想要与请求关联的任何对象。
调用者可以根据用例提供这两个参数,或者将它们保留为null。
参见MSDN:Asynchronous Programming Model (APM)
增编:
在异步WCF服务实现的情况下,WCF本身就是“客户端”,并填充两个额外的参数。
下面是工作流程:
1)请求来自客户端。
2) WCF构造了一个AsyncCallback和一个状态object
3) WCF调用您的BeginX方法并传递参数
4)在您的方法中,使用WCF的参数构造IAsyncResult对象
5)启动一些背景工作并返回IAsyncResult对象
6) WCF等待它的AsyncCallback被调用
7) WCF调用EndX方法并将响应返回给web服务客户端。
客户端对此一无所知,可以使用客户端同步调用或异步调用调用此web服务。
发布于 2013-04-02 14:41:14
如果您使用WCF开发异步调用,请阅读这篇非常有用的文章,这是我用良好的示例代码阅读的关于这个主题的最好文章。
http://www.danrigsby.com/blog/index.php/2008/03/26/async-operations-in-wcf-iasyncresult-model-server-side/
编辑:
客户端:
Service.BeginInitialize(data, new AsyncCallback(OnEndInitialize), null); 客户端包含方法:
void OnEndInitialize(IAsyncResult asyncResult)
{服务将接收"data“对象,执行它需要的任何操作,然后调用客户端的OnEndInitialize方法。
关于您询问的对象状态,当使用APM模式执行异步操作时,服务有2个操作,开始和结束,当他启动时,是使用BeginOperation,当BeginOperation完成时-然后客户机接收到一个IAsyncResult对象,该对象可以包含对象状态。这是用于进度指示的,我将把对象视为乒乓球对象.当服务完成它在服务端调用EndOperation的操作时,这将在客户端调用回调,然后客户端可以再次检查IAsyncResult中的状态对象。
这就是BeginOperation和EndOperation包含IAsyncResult param/IAsyncResult的原因。
https://stackoverflow.com/questions/15757790
复制相似问题