是否可以使用WCF通过TCP / IP与外部系统通信?

时间:2009-04-29 21:58:42

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

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

不幸的是,我没有更多关于上面提供的信息,因为我们仍处于早期规划阶段。我们知道的是,我们有一个外部供应商,其系统将通过TCP / IP与我们的系统进行通信。我们希望将此作为学习机会并学习WCF。

4 个答案:

答案 0 :(得分:3)

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

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

我对FIX不够熟悉,不知道它会有多复杂,但在该区域编写WCF频道和文档时有一些问题。

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

有两种方法可以解决它:

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

  2. 在自定义WCF MessageEncoder中完成所有艰苦工作。它有点复杂,但可能更干净,更可重复(你可以做更复杂的事情,比如更好的流媒体等)。

  3. 但最重要的问题是这是否值得。您想要使用WCF的原因是什么?利用编程模型?我认为这是一个重要的考虑因素,但请记住,WCF提供的抽象是有代价的。特别是,如果您有非常实时的要求,WCF的某些方面可能会有问题,我理解这种要求在您正在考虑的金融环境中很常见。

    如果是这种情况,很可能会通过跳过WCF并更贴近金属来获得更好的服务。无论如何你都需要进行套接字工作,因此需要考虑这个问题。

    希望这会有所帮助:)

答案 1 :(得分:1)

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

为什么不在WCF应用程序中打开TCP连接SOCKET。这应该以更简单的方式完成。

答案 2 :(得分:0)

这样。我有一个系统,我几乎开始工作,应该几乎完全这样做(来自互联网的WCF over HTTP)。服务器提供商似乎不想允许它,因此您需要在该端使用正确的权限才能使其正常工作。

向上拍摄:我不明白为什么不这样做。

答案 3 :(得分:0)

不是真的 - Ms没有让TCP / IP连接处理程序与非WCF服务通信,他们假设您已经编写了一个Web服务来执行此操作。

讨论here on SO