【发布时间】:2010-12-06 22:42:56
【问题描述】:
进行异步 WCF 服务调用时,服务能够(并且必须)执行收到的回调。这在一般 APM 中是有意义的,但在 WCF 情况下,回调实际上是在客户端执行的,这意味着服务器本质上能够执行客户端代码。
有人能解释一下这是如何实现的吗?例如,当使用 http 绑定时,当服务执行回调时,它是否开始发回一个 http 响应,WCF 客户端将其反序列化为执行回调的消息,并且响应通过返回的 End 方法完成异步操作?服务能否调用两次回调
谢谢!
编辑: 只是为了确保它们不会混淆,我不是在询问带有双工合同的回调,而是 AsyncCallback 在合同中传递,如下所示(http://msdn.microsoft.com/en-us/library/ms731177.aspx ):
[OperationContractAttribute(AsyncPattern=true)]
IAsyncResult BeginServiceAsyncMethod(string msg, AsyncCallback callback, object asyncState);
// Note: There is no OperationContractAttribute for the end method.
string EndServiceAsyncMethod(IAsyncResult result);
【问题讨论】:
-
+1 现在我了解到您在询问服务端操作的异步实现,我意识到“什么是回调参数”和“服务实现应该遵循什么规则使用它——例如,如果我调用它两次会发生什么?”是非常有趣的问题。请参阅piers7.blogspot.com/2009/09/… 了解更多信息。我认为有一点很清楚:回调不会调用客户端代码 - 它是 WCF 服务调度程序堆栈中的代码。