【问题标题】:How to apply Task Async Pattern and WCF's ChannelFactory<TChannel>?如何应用任务异步模式和 WCF 的 ChannelFactory<TChannel>?
【发布时间】:2012-11-06 17:43:40
【问题描述】:

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

我们正在迁移到 .NET 4.5 / C# 5,并希望使用 async / await / TAP 使客户端异步。如何最好地做到这一点,以产生干净的代码和良好的运行时性能?

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

【问题讨论】:

    标签: wcf asynchronous task channelfactory


    【解决方案1】:

    您可以使用TaskFactory.FromAsync 将现有的 APM (Begin*/End*) 端点包装到 TAP-ready Tasks。

    您可能会发现我的Async WCF Today and Tomorrow post 很有帮助,它展示了如何将 TAP 与 VS2012 之前的 svcutil 一起使用。

    【讨论】:

    • 谢谢斯蒂芬。根据您的答案搜索信息并阅读您的帖子后,我认为这是可以做到的最好的。我很惊讶 ChannelFactory 在这个时代仍然希望您使用 APM 模式。
    【解决方案2】:

    你看到this了吗? 我举了一个可等待的[OperationContract] 返回Task&lt;TResponse&gt; 的示例。

    【讨论】:

    • 谢谢;我会检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多