我开发了一个使用net.tcp适配器并侦听特定端口的WCF服务.我想使用普通的.net客户端连接到该服务,该客户端使用套接字将数据发送到端口并侦听响应.
当我尝试向此服务发送数据时,我收到错误:"现有连接被远程主机强行关闭".
但是,我能够通过另一个使用WCF服务的地址/绑定/合同的客户端连接该服务.
有没有一种方法可以让我通过使用普通的基于套接字的客户端与WCF服务进行通信?
关键决定是否使WCF服务符合套接字客户端,或者是否使套接字客户端符合WCF服务.
尝试符合WCF服务最简单,而不是尝试在WCF中实现自定义内容,这绝非易事.在下面的"其他资源"部分的底部,您将看到一个链接,该链接描述了尝试符合WCF服务所必需的消息检查.
话虽如此,.NET套接字本身并不与WCF通信.
任何这样做的尝试都需要在WCF方面进行自定义编程.
无论您是使用.NET中的TcpClient还是原始套接字连接到WCF并与之通信都无关紧要.必须使用WCF中的自定义逻辑处理任何此类互操作性.请注意,Net.Tcp是一种自定义传输协议.从技术上讲,TCP的使用方式与TcpClient相同.
例如,UDP在Linux世界中的套接字服务器中非常常用.WCF不提供内置UDP传输.但是,WCF有一个UDP示例,它为WCF实现UDP.遗憾的是,该示例未说明与非WCF UPD套接字服务器之间的通信.
我有一个非常详细的突出问题,我解释了我的努力,以便通常可以测试使用UDP的示例代码...
是否可以使WcfTestClient适用于自定义传输通道?
还没有人回答我的问题.所以,如果你成功完成这项工作,我很感兴趣.我的情况是由希望WCF服务能够调用在Linux上运行的UDP套接字服务器而不必使用非WCF编码混乱我的服务.我不想混合方法.
其他资源......
选择传输
本文指出"WCF TCP传输针对通信两端都使用WCF的场景进行了优化".
http://msdn.microsoft.com/en-us/library/ms733769.aspx
尝试将非WCF客户端连接到使用BasicHttpBinding的WCF服务.
开发人员最终通过WebClient编写自定义代码(而不是TcpClient).
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c2d72c2d-c095-4ae1-b8ae-d15f32a4e0be/
WCF与Raw .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绑定的内置优势.
http://blogs.msdn.com/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx
Net.TCP绑定使用的是一种自定义的线级框架格式,虽然Nicholas Allen最近在该主题上发布了一系列关于该主题的博客文章.该系列从这里开始:http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx
说实话,Net.TCP目前对WCF到WCF通信更有用.如果你想与你需要处理的自定义TCP格式互操作,你最好使用原始套接字或创建自己的自定义WCF传输通道(这可能不是微不足道,顺便说一下)