Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用WCF通过TCP/IP与外部系统通信?_C#_.net_Wcf_Tcp_Fix Protocol - Fatal编程技术网

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

C# 是否可以使用WCF通过TCP/IP与外部系统通信?,c#,.net,wcf,tcp,fix-protocol,C#,.net,Wcf,Tcp,Fix Protocol,我们正在构建一个通过TCP/IP使用与外部系统交互的系统。我曾使用WCF在客户端和服务器之间进行通信,在服务器和客户端上我都有控制权,但从未与外部基于TCP/IP的系统通信。这在WCF中是可能的吗?如果是这样,社区能否为我提供链接,让我开始并朝着正确的方向前进 不幸的是,我没有比上面提供的更多的信息,因为我们仍处于早期规划阶段。我们所知道的是,我们有一个外部供应商,其系统将通过TCP/IP与我们的系统通信。我们希望以此为学习机会,学习WCF 我认为这是不可能的,至少设置起来并不容易,因为你不知道

我们正在构建一个通过TCP/IP使用与外部系统交互的系统。我曾使用WCF在客户端和服务器之间进行通信,在服务器和客户端上我都有控制权,但从未与外部基于TCP/IP的系统通信。这在WCF中是可能的吗?如果是这样,社区能否为我提供链接,让我开始并朝着正确的方向前进


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

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

为什么不在WCF应用程序中打开TCP连接套接字呢。这应该以更简单的方式实现

我想是的。我有一个系统,我几乎得到了工作,这是应该做的几乎完全一样(WCF通过HTTP从互联网)。服务器提供商似乎不想允许它,因此您需要在该端拥有正确的权限才能使其正常工作


上拍:我不明白为什么不可以。

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

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

我对FIX还不太熟悉,无法说它有多复杂,但在编写WCF频道时会遇到一些问题,而在该领域编写文档也不是很好

您需要处理的第二部分是消息编码。对于WCF,所有消息都是XML。也就是说,一旦消息传递到WCF堆栈,它就必须在运行时看起来像一个XML信息集。修复程序不使用XML(afaik),所以您需要对其进行一些调整

有两种方法可以绕过它:

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

  • 在定制的WCF MessageEncoder中完成所有艰苦的工作。它有点复杂,但可能更干净、更可重用(而且您可以做更复杂的事情,比如更好的流式传输等等)

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

    如果是这样的话,你最好跳过WCF,贴得离金属近一点。无论如何,你需要做插座工作,所以这是要考虑的事情。


    希望这有帮助:)

    不是真的-Ms没有让TCP/IP连接处理程序与非WCF服务对话,他们假设您会编写一个Web服务来实现这一点


    这是讨论过的。

    为什么不使用套接字而不使用WCF呢?如果我使用套接字,我看不出WCF有什么帮助。也许我不明白插座是什么。你指的是TCP/IP套接字吗?确切地说,我根本不会使用wcf,但我认为他拥有的不仅仅是他指定的内容,因此使用wcf实现SOA模型。我认为OP应该提供更多关于他的问题的信息+1。。。对于那些想将WCF和TCP/IP与套接字混合使用的人来说,这是一个好问题。我们听说WCF可以通过多种类型的绑定进行通信,而且根本不需要更改编程模型。但是,如果我们只能在控制两个连接系统的系统上使用WCF,可能我们误解了WCF的价值