2014-09-24 65 views
1

我正在创建一个服务,我有两个严格的要求:服务必须通过TCP进行通信;该服务必须能够互操作。我可以通过WCF服务确保TCP的互操作性吗?

我对WCF的TCP传输了解得越多,似乎就不能保证可以互操作。我今天写一个自定义绑定可能是它周围的方式,但TcpTransportBindingElement似乎也是特定的.NET:

的WCF TCP传输对于其中的 通信两端都使用WCF场景进行了优化。

WCF中的服务是否符合这些要求?有没有办法让WCF使用标准(非专有)TCP?

+0

“互通”与什么?为了能够回答它是否“符合您的要求”,我们需要知道您的要求状态您必须与之互操作。另外,您是否知道内置绑定的全部***使用TCP,它只是TCP上的消息协议,当您切换类型时会发生变化。 – 2014-09-24 13:37:22

+0

我认为“互操作性”我的意思是我们不能限制客户端使用什么技术,无论是.NET还是Java或其他。这个需求可以更清楚地表述为“使用任何技术从客户端接收TCP消息”。 – bucktronic 2014-09-24 14:02:07

回答

0

如果您试图与其他.NET应用程序“互操作”,则任何绑定都可以兼容。如果您试图与其他支持SOAP消息的Java平台“可互操作”,但不一定与NetTcpBinding中使用的Microsoft专有消息协议一起使用,那么您可能希望使用名称中包含“Http”的any of the protocols

对于TCP,所有系统提供的绑定都使用TCP进行传输,它们之间的所有区别在于消息协议如何在TCP之上工作。

+0

好的,这很有趣,谢谢。对我们所做的更全面的解释是,我们的服务器和未知客户端都在遵循第三方标准,即“每个人都必须通过TCP进行通信并将这些消息传递给另一个人”。我们曾经在socket层做过,现在想通过WCF来做。所以我想我只想确保WCF服务可以在没有专有消息编码的情况下完成TCP,如果TCP正常,我应该能够创建自定义绑定来处理消息。 – bucktronic 2014-09-24 14:27:01

+1

你是正确的“并将这些消息传递给另一个”将是困难的部分,你将需要编写自己的[自定义编码器](http://msdn.microsoft.com/en-us/library/ms735115 (v = vs.110).aspx)遵循消息协议。你可能能够在编码器下使用.NET内置的TCP传输,但如果它不起作用,你可以随时[写一个自定义的](http://blogs.msdn.com/b/drnick/存档/ 2006/05/08/592110.aspx)。但是你只需要在它上面重新实现一个wcf图层的套接字图层程序,这可能比它的价值更麻烦。 – 2014-09-24 14:58:28

+1

@bucktronic提供了更多的细节,我建议你放弃尝试使用WCF,并创建一个包装你的套接字实现的类,并使用易于使用的调用来代表你想发送的各种消息。我认为这会少一些令人头疼的事情,并且会容易得多。 – 2014-09-24 15:01:54