【发布时间】:2014-07-06 21:48:02
【问题描述】:
今天和过去一样,出现了一个有趣的情况。
我有两个网络服务。两人完成各自的工作后,交易就结束了。在本次讨论中,我将这些 Web 服务命名为:
- RL 服务
- 导航服务
我无法合并这两种服务,因为服务 2 归第 3 方所有。这个第 3 方 Web 服务为我提供了一个 Web 方法,它读取存储在该机器中的 xml 文件,Web 服务所在的位置并进行处理。
我有两个选择:
-
客户端到服务**(S)**
- 客户端使用 xml 数据调用我的 Web 服务 RLService。
- RLService将xml数据存储到xml文件并返回xml文件路径
- 客户端调用 Navision Web 服务,NAVService,带有 xml 文件路径
- NAVService 以 xml 路径返回结果。
- 客户端使用 xml 文件路径调用我的 Web 服务 RLService,该路径返回一个对象以继续进行。
状态图:
-
服务到服务
- 客户端使用 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