如何使用基于套接字的客户端与WCF(net.tcp)服务?

时间:2009-02-13 13:53:34

标签: .net wcf sockets tcp

我开发了一个使用net.tcp适配器并侦听特定端口的WCF服务。我想使用普通的.net客户端连接到该服务,该客户端使用套接字将数据发送到端口并监听响应。
当我尝试向此服务发送数据时,我收到错误:“现有连接被远程主机强行关闭”。
但是,我能够通过另一个使用WCF服务的地址/绑定/合同的客户端连接该服务。
有没有一种方法可以让我通过使用普通的基于套接字的客户端与WCF服务进行通信?

3 个答案:

答案 0 :(得分:51)

关键决定是否使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的示例代码......

Is it possible to make the WcfTestClient work for custom transport channels?

还没有人回答我的问题。所以,如果你成功完成这项工作,我很感兴趣。我的情况是由希望WCF服务能够调用在Linux上运行的UDP套接字服务器而不必使用非WCF编码混乱我的服务。我不想混合方法。

其他资源......

答案 1 :(得分:6)

Net.TCP绑定使用的是一种自定义的线级框架格式,虽然尼古拉斯·艾伦最近在该主题上发布了一系列关于该主题的博客文章。该系列从这里开始:http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx

说实话,Net.TCP目前对WCF到WCF通信更有用。如果你想与你需要处理的自定义TCP格式互操作,你最好使用原始套接字或创建自己的自定义WCF传输通道(这可能不是微不足道的,顺便说一句)

答案 2 :(得分:0)

HY,

您启用了WCF跟踪吗?因为如果您这样做并且您收到以下消息:“该服务不允许您匿名登录。”然后(通常)是安全设置问题。

在这种情况下,请禁用绑定的安全模式:

<netTcpBinding>
   <binding name="MyCustomBinding"> 
      <security mode="None" /> 
   </binding> 
</netTcpBinding>

但更好的方法是使用证书。