【问题标题】:Calling web service to web service; Architecture View调用 Web 服务到 Web 服务;架构视图
【发布时间】:2014-07-06 21:48:02
【问题描述】:

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

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

  1. RL 服务
  2. 导航服务

我无法合并这两种服务,因为服务 2 归第 3 方所有。这个第 3 方 Web 服务为我提供了一个 Web 方法,它读取存储在该机器中的 xml 文件,Web 服务所在的位置并进行处理。

我有两个选择:

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

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

状态图:

  1. 服务到服务

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

    状态图:

物理架构如下所示:

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

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

【问题讨论】:

  • PS:1)“RLService 将 xml 数据存储到 xml 文件”。问:为什么?为什么不直接将其转发到 Web 服务(无需编写不必要的文件)? 2)RLService,处理返回的xml并转换为Object继续进行。问:为什么?为什么客户端不能解释 XML?还是 JSON?如果将它转换为“对象”,它仍然必须在传输之前进行序列化,然后在客户端进行反序列化?为什么不直接发送数据,让客户端反序列化(一次)?
  • @FoggyDay 1. NAVService webservice 只公开带有文件路径的webmethod 来处理,我不拥有这个web 服务的代码。 2. 因为 RLService 和 NAVService 和服务器托管在同一台服务器上,所以 RLService 只能访问这里附带的存储结果文件。客户实际上位于其他地方。我不希望客户端序列化或反序列化的唯一原因是因为我希望所有客户端都获得相同的对象,并且我认为发送原始 Xml 不是一个好主意,稍后将由每个客户端反序列化(手动)。
  • @FoggyDay 让事情更清楚一些,我拥有 RLService 代码,但我没有 NAVService。我最终制作 RLService 的唯一原因是因为我没有将适配器放在 NAVService 上并以我想要的方式公开。所以它就像一个适配器模式,RLService 接受我的请求,按照 NAVService 的方式完成工作。
  • 就像我在下面所说的,“选项 2”似乎更好。原因很简单,它似乎可以最大程度地减少来回传输的网络消息的数量。恕我直言...

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


【解决方案1】:

问:哪种方法更好?

答:往返次数越少越好。

答:您在一次通话中可以做的事情越多(无需另外拨打另一个单独的电话)越好。

换句话说(在所有条件相同的情况下),看起来您的第二个设计比第一个替代方案要很多。

恕我直言...

【讨论】:

  • 问题是要更多地了解模式,因为这两个服务都托管在同一个 IIS 中,所以我无法购买它会提高性能。不过,我感谢您的积极参与。
【解决方案2】:

如果您将此逻辑放入您的服务中,显然它将客户端应用程序与所需的工作流分离,并确保应用程序/业务逻辑在您的业务服务中。事实上,最好让你的客户尽可能瘦。所以解决方案二将是首选的解决方案(对我来说)。当然,您仍然可以决定将其设为异步操作,这取决于您的用例。

因此,任何逻辑更改只会影响您的服务,而不影响客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多