2009-02-13 20 views
38

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

+0

要确保大家都明白你在这里试图做什么......请你澄清一下,如果你正在尝试使用.NET内置的套接字编程工具连接到Net.Tcp WCF服务,反之亦然? – 2009-02-14 18:15:53

+0

EnocNRoll,你是对的。 我正尝试使用基于套接字的客户端来传递基于net.tcp的WCF服务。 – Burhan 2009-02-16 09:33:12

回答

48

关键的决定是让WCF服务符合套接字客户端还是使套接字客户端符合WCF服务。

这将是最简单的尝试符合WCF服务,而不是尝试在WCF中实现自定义内容,这从来都不容易。在下面的其他资源部分的底部,您将看到一个链接,描述为了符合WCF服务而必需的邮件检查。

话虽如此,.NET套接字本身不会与WCF通信。

任何尝试这样做都需要在WCF端进行自定义编程。

无论您是使用TcpClient还是使用.NET中的原始套接字连接到WCF并与之通信都无关紧要。任何这样的互操作性都必须在WCF中用自定义逻辑来处理。请注意,Net.Tcp是一种自定义传输协议。它在技术上并不像TcpClient那样使用TCP。

例如,Linux世界中的套接字服务器非常常用UDP。 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编码混淆我的服务。我不想混用各种方法。

其他资源...

+10

我的答案绝对不值得被低估。 – 2009-02-14 19:03:35

0

Hy,

您是否启用了WCF跟踪功能?因为如果你这样做,你会得到以下消息:“该服务不允许你匿名登录。”那么它通常是一个安全设置问题。

在这种情况下,禁用安全模式的结合:

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

但是更好的将是与证书的工作。

6

的net.tcp绑定使用了是不是真的记录,虽然聂雅伦的话题开始了一系列博客文章的最近一个自定义线级帧格式。这个系列从这里开始:http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx

说实话,Net.TCP对于WCF到WCF通信来说确实是非常有用的。如果您想与您需要处理的自定义TCP格式进行互操作,则使用原始套接字或创建自己的自定义WCF传输通道(这可能不是微不足道的,顺便说一句)要好得多了

相关问题