似乎我可以在以下三个不同版本的同一个WCF合约接口API之间自由切换,而不会破坏客户端:
[ServiceContract]
interface IService
{
// Either synchronous
// [OperationContract]
// int SomeMethod(int arg);
// Or TAP
[OperationContract]
Task<int> SomeMethodAsync(int arg);
// Or APM
// [OperationContract(AsyncPattern = true)]
// IAsyncResult BeginSomeMethod(int arg, AsyncCallback callback, object state);
// int EndSomeMethod(IAsyncResult ar);
}
现有的测试客户端应用程序在没有任何重新编译或接触的情况下继续工作。如果我重新编译服务并将其引用重新导入到客户端应用程序中,WSDL定义仍然是相同的,即1:1。
我的问题:
其思想是将一组同步的SomeMethod
-style方法转换为TAP SomeMethodAsync
-style方法,以便在其实现中使用async/await
,从而在不破坏现有客户端的情况下提高WCF服务的可扩展性。
此外,在WCF3.5和.NET 4.0下,.NET服务伸缩也存在一些已知的问题。它们记录在MSKB文章"WCF service may scale up slowly under load"和CodeProject文章"Tweaking WCF to build highly scalable async REST API"中。基本上,仅将服务契约API实现为自然异步是不够的,WCF运行时仍然阻塞请求线程。
https://stackoverflow.com/questions/22623922
复制相似问题