我们正在构建一个使用FIX 协议通过 TCP/IP 与外部系统交互的系统。我使用 WCF 从客户端到服务器进行通信,我可以控制客户端和服务器,但从不控制外部基于 TCP/IP 的系统。WCF可以做到这一点吗?如果是这样,社区是否可以提供链接让我开始并面对正确的方向?
不幸的是,我没有上面提供的更多信息,因为我们仍处于早期规划阶段。我们所知道的是,我们有一个外部供应商,其系统将通过 TCP/IP 与我们的系统进行通信。我们想以此为契机,学习 WCF。
我们正在构建一个使用FIX 协议通过 TCP/IP 与外部系统交互的系统。我使用 WCF 从客户端到服务器进行通信,我可以控制客户端和服务器,但从不控制外部基于 TCP/IP 的系统。WCF可以做到这一点吗?如果是这样,社区是否可以提供链接让我开始并面对正确的方向?
不幸的是,我没有上面提供的更多信息,因为我们仍处于早期规划阶段。我们所知道的是,我们有一个外部供应商,其系统将通过 TCP/IP 与我们的系统进行通信。我们想以此为契机,学习 WCF。
可能的?可能是的,但这需要一些工作。
对于初学者,您需要编写一个自定义的 WCF 传输通道来处理基于 TCP/IP 的协议的细节(即,您需要编写所有套接字处理代码并将其挂接到 WCF 通道模型中)。这是因为 WCF 中的 TCP 通道不适用于此类工作,而是使用相对专有且未记录的有线协议。
我对 FIX 不太熟悉,无法说出它有多复杂,但是在编写 WCF 通道时存在一些问题,并且该领域的文档不是很好。
您需要处理的第二部分是消息编码。对于 WCF,所有消息都是 XML。也就是说,一旦将消息传递到 WCF 堆栈,它必须在运行时看起来像一个 XML 信息集。FIX 不使用 XML (afaik),因此您需要对其进行一些调整。
有两种方法可以绕过它:
简单的方法:假设服务器/客户端将使用特定的接口和数据格式,并让您的频道完成将 FIX 消息转换为/从该格式转换的所有艰苦工作。最简单的示例是让您的 WCF 代码使用简单的服务合同,其中一种方法采用字符串,然后将 FIX 消息字符串封装为满足该合同的数据合同序列化程序的 XML 格式。不过,用户代码稍后仍需要处理解码 FIX 格式。
在自定义 WCF MessageEncoder 中完成所有艰苦的工作。它有点复杂,但可能更清洁和更可重用(你可以做更复杂的事情,比如更好的流媒体等等)。
不过,最大的问题是这是否值得。您想为此使用 WCF 的原因是什么?利用编程模型?我认为这是一个重要的考虑因素,但也要记住 WCF 提供的抽象是有代价的。特别是,如果您有非常实时的需求,WCF 的某些方面可能会出现问题,据我所知,这在您正在查看的金融环境中很常见。
如果是这种情况,很可能您最好跳过 WCF 并贴近金属一点。无论如何,你都需要做套接字工作,所以这是需要考虑的事情。
希望这可以帮助 :)
我认为不可能,至少设置起来并不容易,因为你不知道另一端的通信协议,除了它是TCP并接受FIX标签。
为什么不在 WCF 应用程序中打开 TCP 连接 SOCKET。那应该以更简单的方式解决问题。
我想是的。我有一个几乎可以正常工作的系统,它应该几乎完全做到这一点(来自互联网的基于 HTTP 的 WCF)。服务器提供商似乎不想让它思考,因此您需要在这方面获得正确的权限才能使其正常工作。
上镜头:我不明白为什么不。
不是真的 - Ms 没有让 TCP/IP 连接处理程序与非 WCF 服务通信,他们认为你会编写一个 Web 服务来做到这一点。
这在 SO 上进行了讨论。