net.tcp和TCP协议有什么区别?

时间:2010-12-29 15:19:30

标签: wcf

我正在阅读<学习WCF>作者:Michele Leroux Bustamante。在本书中,当谈到 net.tcp 协议时,作者只是说 TCP 。那么 net.tcp 与着名的 TCP 协议之间的区别是什么?

net.msmq net.pipe 一样, net 前缀是什么意思?

非常感谢。

5 个答案:

答案 0 :(得分:32)

net.tcp只是Windows中用于识别可以使用TCP访问的端点的URI方案。

同样,net.msmqnet.pipe是用于解决分别使用MSMQ protocolNamed Pipes protocol的端点的URI方案。

所有三个上的net前缀表示URI方案仅设计用于Microsoft .NET平台,并且在更广泛的互联网中通常不被接受。 (其他URI方案,例如httpftp已经具有普遍接受的含义,因此在WCF中使用而没有任何前缀)。因此,net前缀可作为警告铃,相关端点与其他未在.NET平台上运行的应用程序之间具有有限/无互操作性。

示例URI:

net.tcp://localhost:7272
net.msmq://somemachine/publicQueue
net.pipe://machine.domain.com/somePipe

SIDEBAR:虽然MSMQ和命名管道显然是Microsoft协议,因此缺乏互操作性并不令人惊讶,TCP是互联网的基础协议,因此,它肯定不能在WCF中使用。 NET具体?

嗯,WCF中的互操作性已经由SOAP和HTTP处理,它们都运行在TCP之上。如果您想通过TCP实现互操作性 - 请使用其中一种协议。

因此,微软希望提供一种通信替代方案,其中性能而非互操作性是关键目标。 TCP是合乎逻辑的选择,但TCP是一种相对较低级别的协议,它需要额外的行为和默认值才能实现,以便像WCF这样的消息传递框架以直接的方式工作。此外,TCP可访问资源没有普遍接受的URI方案,因此Microsoft需要发明一个。因此,net.tcp诞生了。


虽然URI本身并不一定表明要使用哪种绑定,但它们确实提供了一个提示。根据Simon Mourier的回答,可以找到WCF中当前可用的绑定here。因此,例如,net.tcp地址可能表示需要NetTcpBinding,NetPeerTcpBinding或NetTcpContextBinding。

答案 1 :(得分:4)

net.tcp位于服务模型(WCF)命名空间中。它由许多类表示,最明显的是NetTcpBinding Class。因此,net.tcp本质上是一个WCF绑定('一种适用于跨机器通信的安全,可靠的绑定'。)。

因此,net.tcp只能在WCF上下文中使用,并且只是基于 TCP协议。但你不能说net.tcp = TCP。 net.tcp只使用TCP。与其他绑定相比,它被认为是高效的,但不能互操作。

net.pipe,net.msmq的故事是相同的,它们是分别通过较低的Windows技术实现的WCF绑定Named PipesMSMQ

以下是系统提供的WCF绑定列表:System-Provided Bindings

答案 2 :(得分:3)

描述差异的好文章between wcf bindings is here

答案 3 :(得分:2)

这些是在Microsoft堆栈中设置的协议,作为WCF通信中的附加选项。基本上,您可以使用工具进行通信服务。但请注意,虽然每个人可能会有不同的好处,但Microsoft为WCF提出的net *协议与这些服务的非WCF(和非Microsoft)消费者不能很好地协作。如果需要考虑互操作性,它们可能会在以后引起麻烦。

答案 4 :(得分:1)

前缀.net表明框架作者已经包装了协议,为您提供了一个隐藏复杂性并使开发人员更容易使用它的API。