【问题标题】:Is it possible to communicate with an external system over TCP/IP using WCF?是否可以使用 WCF 通过 TCP/IP 与外部系统进行通信?
【发布时间】:2009-04-29 21:58:41
【问题描述】:

我们正在构建一个使用FIX Protocol 通过 TCP/IP 与外部系统交互的系统。我使用 WCF 从客户端到服务器进行通信,在那里我可以控制客户端和服务器,但从不控制外部基于 TCP/IP 的系统。 WCF可以做到这一点吗?如果是这样,社区是否可以提供链接让我开始并朝着正确的方向前进?

很遗憾,我没有以上提供的更多信息,因为我们仍处于早期规划阶段。我们所知道的是,我们有一个外部供应商,其系统将通过 TCP/IP 与我们的系统进行通信。我们想以此为契机,学习 WCF。

【问题讨论】:

  • +1...对于那些想要将 WCF 和 TCP/IP 与套接字混合使用的人来说,这是一个很好的问题..
  • 我们听说 WCF 可以通过多种类型的绑定进行通信,而且根本不需要更改编程模型。但是,如果我们只能将 WCF 用于我们可以控制两个连接系统的系统,那么我们可能误解了 WCF 的价值

标签: c# .net wcf tcp fix-protocol


【解决方案1】:

可能吗?可能是的,但这需要一些工作。

首先,您需要编写一个自定义的 WCF 传输通道来处理基于 TCP/IP 的协议的细节(即,您需要编写所有套接字处理代码并将其挂接到 WCF 通道模型中)。这是因为 WCF 中的 TCP 通道不适用于此类工作,而是使用相对专有且未记录的有线协议。

我对 FIX 不太熟悉,无法说出它会有多复杂,但是在编写 WCF 通道时存在一些问题,并且该领域的文档不是很好。

您需要处理的第二部分是消息编码。对于 WCF,所有消息都是 XML。也就是说,一旦将消息传递到 WCF 堆栈,它必须在运行时看起来像一个 XML 信息集。 FIX 不使用 XML (afaik),因此您需要稍微调整一下。

有两种方法可以绕过它:

  1. 简单的方法:假设服务器/客户端将使用特定的接口和数据格式,并让您的频道完成将 FIX 消息转换为/从该格式转换的所有艰苦工作。最简单的示例是让您的 WCF 代码使用简单的服务合同,其中一种方法采用字符串,然后将 FIX 消息字符串封装为满足该合同的数据合同序列化程序的 XML 格式。不过,用户代码稍后仍需要处理 FIX 格式的解码。

  2. 在自定义 WCF 消息编码器中完成所有艰苦的工作。它有点复杂,但可能更清洁和更可重用(你可以做更复杂的事情,比如更好的流媒体等等)。

不过,最大的问题是这是否值得。您想为此使用 WCF 的原因是什么?利用编程模型?我认为这是一个重要的考虑因素,但也要记住 WCF 提供的抽象是有代价的。特别是,如果您有非常实时的要求,WCF 的某些方面可能会出现问题,据我所知,这在您所关注的金融环境中很常见。

如果是这种情况,很可能您最好跳过 WCF 并贴近金属一点。无论如何,您都需要完成套接字工作,所以这是需要考虑的事情。

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    我认为不可能,至少设置起来并不容易,因为你不知道另一端的通信协议,除了它是TCP和接受FIX标签。

    你为什么不在 WCF 应用程序中打开 TCP 连接一个 SOCKET。那应该以更简单的方式解决问题。

    【讨论】:

    • 为什么不只使用套接字而不使用 WCF?如果我使用套接字,我看不出 WCF 有什么帮助。也许我不明白 SOCKET 是什么。你是说 TCP/IP 套接字吗?
    • 确实,我根本不会使用 wcf,但我认为他拥有的不仅仅是他指定的内容,因此使用 WCF 实现了 SOA 模型。我认为 OP 应该提供有关他的问题的更多信息
    【解决方案3】:

    我认为是的。我有一个我几乎开始工作的系统,它应该几乎完全做到这一点(来自互联网的基于 HTTP 的 WCF)。服务器提供商似乎不想让它思考,因此您需要在这方面获得正确的权限才能使其正常工作。

    上图:我不明白为什么不。

    【讨论】:

      【解决方案4】:

      并非如此 - Ms 没有让 TCP/IP 连接处理程序与非 WCF 服务通信,他们认为您会编写一个 Web 服务来做到这一点。

      这是在here on SO讨论。

      【讨论】:

        猜你喜欢
        • 2012-07-13
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 1970-01-01
        • 2012-04-26
        • 2017-02-23
        • 1970-01-01
        相关资源
        最近更新 更多