【问题标题】:Beginners WCF Question - Consumable asynchronous services初学者 WCF 问题 - 可消耗的异步服务
【发布时间】:2008-12-09 16:34:21
【问题描述】:

这是一个更“可以完成”的问题,而不是“如何完成”的问题。我正在考虑构建一个服务(中间层,.net,提供数据抽象和一些业务逻辑),供不同平台上的多个内部客户端系统使用。例如。一个客户端可能是一个网站,另一个客户端一些 java 代码,另一个客户端 C# 等等。

我想在我的服务中提供同步和异步 API,例如GetData、BeginGetData、EndGetData 方法。我还希望客户能够注册新“数据”被添加到系统的通知。过去,我使用带有 Tibco EMS 通道的 Web 服务来实现这一点。

我的问题是:我能否通过公开 WCF 服务来实现这三个要求(同步、异步和发布/订阅)?非 WCF 客户端可以使用此服务吗?

请原谅这个问题含糊不清 - 我可以根据需要详细说明。

提前致谢。

【问题讨论】:

    标签: c# .net wcf soa


    【解决方案1】:

    默认情况下方法是同步的。要使它们异步,您需要添加此属性 [OperationContract(AsyncPattern=true)] 并返回一个 IAsynchResult,就像使用 Winform 执行 BeginIvoke() 一样。 (在这里阅读更多http://msdn.microsoft.com/en-us/library/ms734701.aspx

    您可以使用称为回调合同的东西进行发布/订阅(尽管我不确定在其他平台上实现此功能)我对这些没有太多经验,但它们似乎并不十分复杂(您可以阅读更多这里http://dotnetaddict.dotnetdevelopersjournal.com/wcf_alarmclock.htm)

    【讨论】:

      【解决方案2】:

      在您的 WCF 服务上设置异步操作可以通过设置 AsyncPattern=true 来像 Ninja 发布的那样完成,也可以在客户端通过设置正确的命令行参数或通过检查来告诉 svcutil 生成异步端点来完成svcutil 的 GUI 版本中的“生成异步操作”选项。生成异步仍然会生成同步操作。

      客户端异步选项的问题是您需要在 Java 中复制代码。 Svcutil 会按照您的指定导出 VB 或 C# 代码,因此您很可能无需太多工作就可以将 C# 代码转换为 Java。

      对于 Pub/Sub,客户端回调是您想要的操作方式。我正在使用它们,它们工作得很好。在根级别,它们是.Net Remoting 并使用事件将数据传递给客户端(我的理解)。我无法确认这可以跨平台使用,但应该有一些工作。

      【讨论】:

      • WCF pub/sub not .net 远程处理:它是双向的带有合约的全双工消息交换。它实际上比您在 .net 远程处理中可以做的限制更多,但我猜这就是更多基于合同的成本
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 2013-09-11
      • 2012-12-18
      • 2011-09-05
      相关资源
      最近更新 更多