c# - WCF:单个方法或接受 xml 的通用 ProcessMessage 方法

标签 c# xml wcf architecture

我的公司正在开发一个应用程序,它通过 TCP 套接字和 xml 消息从另一家公司接收数据。这被传送到单个网关应用程序,然后将其广播到我们组织中不同机器上同一内部应用程序的多个副本。

WCF 被选为处理内部通信(内部双向)的技术。开发人员考虑了两种方法。

  1. 公开的个别方法 每个不同的 WCF 服务 网关收到的消息 应用。网关 应用程序将解析传入的 外部消息并调用 适当的 WCF 服务方法。这 传入的 XML 将被翻译 进入 DataContract DTO 并提供 作为适当 WCF 的参数 方法。

  2. 内部应用 公开了一个 WCF 服务 方法“ProcessMessage” 接受 Xml 字符串消息作为 争论。内部应用程序将 解析然后反序列化收到的 xml 并相应地处理它。

首席开发人员认为选项二是更好的选项,因为它“更容易”序列化/反序列化 xml。我认为这个论点没有意义,因为 DataContracts 是由 WCF 序列化和反序列化的,并且通过使用 WCF 我们可以更好地输入数据。在选项 2 中,有人可以调用 WCF 服务并传入任何字符串。我相信选项 1 提供了一个更整洁的界面,并使应用程序更易于维护和使用。

这两个选项在某些时候仍需要对原始 xml 字符串进行解析和验证,因此执行此验证的推荐位置在哪里也可能是一个问题。

我想知道目前传递此类信息的想法是什么,以及人们对这两种选择的看法是什么。

最佳答案

如果您可以确保客户端始终向服务器发送数据契约的序列化表示,则适合选项 1。

但是,如果您需要序列化/反序列化逻辑中的一些灵 active 并且不与 DataContracts 紧密耦合,那么选项 2 看起来不错。当你想支持 xml 的替代形式时特别有用(比如 Atom 表示、自定义格式的原始 xml 等)

同样在 ProcessMessage() 方法内的选项 2 中,您可以选择决定是否 反序列化传入的 xml 有效负载(基于请求 header 或特定于您的应用程序的内容) .

在选项 1 中,WCF 运行时将始终反序列化负载。

关于c# - WCF:单个方法或接受 xml 的通用 ProcessMessage 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/539503/

相关文章:

c# - 使用循环转换此 linq 表达式

xml - 如何使用 hexpat 延迟处理 xml 文档?

.net - 在没有 svcutil.exe 的情况下创建 WCF 应用程序?

c# - 找不到与具有绑定(bind) WSHttpBinding 的端点的方案 http 相匹配的基地址

c# - 将以度为单位的角度转换为矢量

c# - BackgroundWorker 和实例变量

c# - 属性 'ID'是对象关键信息的一部分,在asp.net mvc中不能修改

java - Freemarker解析异常: "Unknown directive: #outputformat"

java - 在Spring Batch中,如何读取XML属性?

wcf - Azure 中的单一并发模式 WCF 服务