将Web服务调用到Web服务;建筑视图

时间:2014-05-19 03:11:50

标签: web-services wcf architecture software-design distributed-transactions

今天也出现了一个有趣的情况,就像过去一样。

我有两个网络服务。在这两个人完成自己的工作后,交易将结束。在本次讨论中,我将这些Web服务命名为:

  1. RLService
  2. NavService
  3. 我无法合并这两项服务,因为服务2归第三方所有。这个第三方Web服务为我提供了一个web方法,用于读取存储在该机器中的xml文件,其中包含Web服务并进行处理。

    我有两个选择:

    1. 客户服务**(S)**

      • 客户端使用xml数据调用我的Web服务RLService。
      • RLService将xml数据存储到xml文件并返回xml文件路径
      • 客户端使用xml文件路径调用Navision Web服务NAVService
      • NAVService将结果作为xml路径返回。
      • 客户端使用xml文件路径调用我的Web服务RLService,该路径返回一个Object以继续进行。
    2. 状态图:

      State Diagram

      1. 服务服务

        • 客户端使用xml数据调用我的Web服务RLService。
        • RLService将xml数据存储到xml文件
        • RLService调用Navision Web服务,NAVService,带有xml文件路径
        • NAVService将结果作为xml路径返回。
        • RLService,处理返回的xml并转换为Object以继续进行。
        • 客户端收到一个类Result对象。

        状态图:

        State Diagram

      2. 以下是物理架构的外观:

        Physical Architecture

        我遵循两种方式,但正确的方法是什么?为什么?

        当然,我知道第二种解决方案是好的。但是模式和最佳实践又如何呢?

2 个答案:

答案 0 :(得分:0)

问:哪种方法更好?

答:往返次数越少越好。

答:你在一次通话中可以做的越多(不进行另一次,单独的通话),越好。

换句话说(所有事情都相同),看起来你的第二个设计比第一个设计更好 LOT

... IMHO

答案 1 :(得分:0)

如果您将此逻辑放在您的服务中,显然它会将客户端应用程序与所需的工作流分离,并确保应用程序/业务逻辑在您的业务服务中。事实上,最好让您的客户尽可能地保持精简。因此,解决方案二将是首选解决方案(对我而言)。当然,您仍然可以决定使其成为异步操作,具体取决于您的用例。

因此,逻辑上的任何变化都只会影响您的服务,而不会影响客户。