我正在研究使用 WCF 在服务器和客户端之间实现真正异步通信的替代方案。我当然碰到过AsyncPattern = true
。
折腾了一下,发现AsyncPattern
是用来做服务实现的,而不是接口异步的,也就是暴露给客户端的服务还是同步的。例如,假设一个名为BeginMethod
and的异步对EndMethod
,如下所示:
[ServiceContract]
interface IMyService
{
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginMyMethod(...);
MyComplexResult EndMyMethod(...);
}
现在,由此生成的 WSDL 将只公开一个名为 MyMethod 的方法:
<wsdl:portType name="IMyService">
<wsdl:operation name="MyMethod">
<wsdl:input wsaw:Action="http://tempuri.org/IMyService/MyMethod" message="tns:IMyService_MyMethod_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IMyService/MyMethodResponse" message="tns:IMyService_MyMethod_OutputMessage"/>
</wsdl:operation>
</wsdl:portType>
问题是,是否有任何配置会强制 WCF 将APM的两种方法实际公开给客户端?