我正在阅读<学习WCF>作者:Michele Leroux Bustamante。在本书中,当谈到 net.tcp 协议时,作者只是说 TCP 。那么 net.tcp 与着名的 TCP 协议之间的区别是什么?
和 net.msmq , net.pipe 一样, net 前缀是什么意思?
非常感谢。
答案 0 :(得分:32)
net.tcp
只是Windows中用于识别可以使用TCP访问的端点的URI方案。
同样,net.msmq
和net.pipe
是用于解决分别使用MSMQ protocol和Named Pipes protocol的端点的URI方案。
所有三个上的net
前缀表示URI方案仅设计用于Microsoft .NET平台,并且在更广泛的互联网中通常不被接受。 (其他URI方案,例如http
和ftp
已经具有普遍接受的含义,因此在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 Pipes和MSMQ。
以下是系统提供的WCF绑定列表:System-Provided Bindings
答案 2 :(得分:3)
描述差异的好文章between wcf bindings is here。
答案 3 :(得分:2)
这些是在Microsoft堆栈中设置的协议,作为WCF通信中的附加选项。基本上,您可以使用工具进行通信服务。但请注意,虽然每个人可能会有不同的好处,但Microsoft为WCF提出的net *协议与这些服务的非WCF(和非Microsoft)消费者不能很好地协作。如果需要考虑互操作性,它们可能会在以后引起麻烦。
答案 4 :(得分:1)
前缀.net表明框架作者已经包装了协议,为您提供了一个隐藏复杂性并使开发人员更容易使用它的API。