【问题标题】:WCF to WCF CommunicationWCF 到 WCF 通信
【发布时间】:2013-07-09 12:55:10
【问题描述】:

我有一个架构,其中有以下组成部分:

  1. 外部应用程序 (EA) - 向 WCF 服务发出请求的第三方
  2. WCF 服务 (WS) - 所有业务逻辑
  3. Pub-Sub 服务 (PSS) - 处理发布和订阅
  4. 内部应用程序 (IA) - 订阅或取消订阅 Pub-Sub(带有回调)

外部应用程序 (EA) 引用 WCF 服务 (WS) 并调用特定方法,所有内部应用程序 (IA) 都应通过 Pub-Sub 服务 (PSS) 通知该方法。

我遇到的问题是决定让一个 WCF 服务 (WS) 与另一个 WCF 服务(Pub-Sub 服务)通信是否可行或最佳实践。我读到这不是一个好主意,因为请求是以同步方式处理的,这可能会导致服务交付不一致。

我基于此的具体问题是 - 有人可以分享允许两个 WCF 服务相互通信的优点和缺点吗?还是这不是问题?

谢谢

【问题讨论】:

  • 对我来说这听起来像是一个基于消息的架构。为了使您的架构更具容错性,而不是同步调用 PSS,而是使用消息队列(例如 MSMQ),以便 WS 即使在 PSS 关闭的情况下也可以继续。这甚至会提高性能。
  • 谢谢 - 很棒的建议,但不幸的是我无法获得相关资源。所以我希望能有一些类似上面提到的东西。

标签: c# wcf architecture


【解决方案1】:

我同意其他答案,但是由于您的可用资源无法使用面向消息的方法,所以我会这样说。

只要您的 WCF 服务充当客户端(您的“WS”)和服务器(您的“PSS”),它就会共享任何客户端-服务器应用程序的缺陷。 但是,这假设了几件事:

a) 您的“WS”对您的“EA”实施单向操作,或“即发即弃”。请参阅此处以供参考:What You Need To Know About One-Way Calls, Callbacks, And Events。否则,“EA”将不得不等到您对“PSS”的内部调用完成。

b) 您的“WS”通道已配置好并且有足够的资源来处理负载,因为单向操作并不是真正异步的;如果通道无法处理负载,则调用将排队并阻塞客户端,直到资源被释放并且可以继续执行。

c) 不需要对保证、事务性或有序交付或任何其他类似消息传递的行为进行任何限制。

但是,之前说过,这种场景确实需要基于消息的架构。您有几个故障点,并且对这个依赖链进行故障排除将没有乐趣。

【讨论】:

    【解决方案2】:

    我完全同意史蒂文的观点。您应该考虑在此处使用消息队列。资源如下:

    http://msdn.microsoft.com/en-us/library/ms751499.aspx

    http://msdn.microsoft.com/en-us/library/ms731089.aspx

    http://www.codeproject.com/Articles/34168/WCF-Queued-Messaging

    希望这些就足够了。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 2011-10-17
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多