我想创建一个支持异步调用的WCF服务。我跟所有的样品和教程我能找到,而他们都有一个同步的方法的习惯模式,以及异步的开始和结束,如:异步WCF
[OperationContract(AsyncPattern = false)]
string GetData(int value);
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginGetData(int value, AsyncCallback callback, object asyncState);
string EndGetData(IAsyncResult result);
然而,只有同步的GetData被调用,不管我在客户端做什么。提琴手告诉我,该消息始终是相同的:
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetData
xmlns="http://tempuri.org/"><value>0</value></GetData></s:Body></s:Envelope>
当我删除同步的GetData接口,异步方法现在被正确调用。
这是正常的行为吗?还有什么我应该做的,以支持方法的同步和异步版本?
这与我在运行时看到的相符,只是我找到的所有代码示例都包含了所有这些示例代码。如果异步都在客户端,那么为什么还要在服务器端支持异步? –
您正在查看的示例在服务器上也只有一个实现。他们可能在客户端都有,但在服务器上这是没有道理的。很难在此评论框中解释何时使用服务器端异步。总之,不要在服务器上默认使用它。如果特殊情况使其具有吸引力或必要性,请使用它在元层面上,让我指出异步IO已成为一种不应该轻视的时尚。社区现在处于一种非常不幸的错误信息状态。 – usr
我必须在那里同意你的看法。我有时也会看到事情在SOA方式上完成,通过调用db调用可能会简单得多。 –