如何应用任务异步模式和WCF的ChannelFactory <tchannel>?</tchannel>

时间:2012-11-18 18:11:45

标签: wcf asynchronous task channelfactory

我们在2008年在.NET 3.5上构建了一个强大的WCF客户端(现在在.NET 4.0下重新编译),它通过net.tcp绑定与我们自己的WCF服务进行通信。健壮的客户端使用ChannelFactory&lt; IOurServiceInterface&gt;()来生成服务代理,我们通过该服务代理对服务进行同步调用。我们从每次通话中得到结果;我们没有单向电话。

我们正在迁移到.NET 4.5 / C#5,并希望使用async / await / TAP使客户端异步。如何以最佳方式执行此操作,从而获得干净的代码和良好的运行时性能?

(我看过关于这个主题的MS文档,但是它总是讨论运行svcutil。我们不使用svcutil;我们直接使用ChannelFactory。另外:MS文档用于在.NET下使用通道工厂异步调用操作4.5自.NET 3.0天以来没有变化。似乎ChannelFactory没有接受新的异步。)

2 个答案:

答案 0 :(得分:7)

您可以使用TaskFactory.FromAsync将现有APM(Begin* / End*)端点打包到TAP就绪Task

您可能会发现我的Async WCF Today and Tomorrow post有帮助,其中显示了如何在VS2012之前的svcutil中使用TAP。

答案 1 :(得分:3)

您看到this了吗? 我举了一个等待[OperationContract]返回Task<TResponse>的例子。