如何使用WCF(net.tcp)服务使用基于套接字的客户端?
我开发了一个使用net.tcp适配器并监听特定端口的WCF服务。 我想使用普通的.net客户端连接到该服务,该客户端使用套接字将数据发送到端口并侦听响应。
当我尝试将数据发送到此服务时,出现错误:“现有连接被远程主机强行closures”。
但是,我能够通过使用WCF服务的地址/绑定/合同的另一个客户端连接服务。
有没有一种方法可以使我通过一个普通的基于套接字的客户端与WCF服务进行通信?
关键的决定是让WCF服务符合套接字客户端还是使套接字客户端符合WCF服务。
尝试遵守WCF服务将是最简单的,而不是尝试在WCF中实现自定义内容,这从来都不容易。 在下面的其他资源部分的底部,您将看到一个链接,描述为了符合WCF服务而必需的邮件检查。
话虽如此,.NET套接字本身不与WCF通信。
任何尝试这样做都需要在WCF方面进行自定义编程。
无论您是使用TcpClient还是使用.NET中的原始套接字连接到WCF并与之通信都无关紧要。 任何这样的互操作性必须在WCF内部用自定义逻辑来处理。 请注意Net.Tcp是一个自定义传输协议。 这在技术上并不像TcpClient那样使用TCP。
例如,UDP是Linux世界中套接字服务器非常常用的。 WCF不提供内置的UDP传输。 但是,有一个WCF的UDP示例为WCF实现了UDP。 不幸的是,该示例没有说明与非WCF UPD套接字服务器进行通信。
我有一个相当详细的问题,我解释了我的努力,以获得示例代码一般可testing使用UDP …
是否有可能使WcfTestClient工作的自定义传输通道?
没有人回答我的问题。 所以,如果你成功做这个工作,我很感兴趣。 我的情况是由于希望WCF服务能够呼叫到在Linux上运行的UDP套接字服务器,而不必使用非WCF编码混淆我的服务。 我不想混合的方法。
其他资源…
-
select一个运输
本文指出:“WCF TCP传输已针对通信两端均使用WCF的情况进行了优化”。 -
尝试将非WCF客户端连接到使用BasicHttpBinding的WCF服务。
开发人员最终通过WebClient(而不是TcpClient)编写自定义代码。http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c2d72c2d-c095-4ae1-b8ae-d15f32a4e0be/
-
WCF与原始.NET套接字
答案指出,可能需要TCP +二进制序列化或UDP +二进制序列化。 有一个UDP绑定的样本,如上所述。http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c0520111-c1ca-4ffd-a4e0-ac68e86130ee/
-
将自定义请求写入简单的WCF服务
作者解释了如何确定需要发送到服务的消息的格式,以便TcpClient或其他非WCF套接字客户端可以将写入信息发送给WCF服务。 这里的含义是,你不是试图符合WCF服务,而是你迫使套接字客户端做繁重的工作。 即使如此,如果您期待的话,您也不会获得WCF绑定的内置优势。
Net.TCP绑定使用了一种自定义的电报级格式,虽然Nicholas Allen最近在这个主题上发表了一系列的博客文章。 系列从这里开始: http : //blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx
说实话,目前Net.TCP对于WCF到WCF的通信更为有用。 如果你想用你需要处理的自定义TCP格式进行互操作,那么使用原始套接字或创build自己的自定义WCF传输通道(这可能不是微不足道的,顺便说一句)
HY,
你启用了WCF跟踪? 因为如果你这样做,你会得到以下消息: “该服务不允许你匿名login”。 那么通常是安全设置问题。
在这种情况下禁用绑定的安全模式:
<netTcpBinding> <binding name="MyCustomBinding"> <security mode="None" /> </binding> </netTcpBinding>
但更好的是与证书一起工作。