[英]what's the difference between net.tcp and TCP protocol?
我正在阅读Michele Leroux Bustamante撰写的<学习WCF>。 在本书中,当谈到net.tcp协议时,作者只是说TCP 。 那么net.tcp和着名的TCP协议之间的区别是什么?
和net.msmq , net.pipe一样, 净前缀是什么意思?
非常感谢。
net.tcp
只是Windows中用于标识可以使用TCP访问的端点的URI方案。
类似地, net.msmq
和net.pipe
分别是用于解决利用MSMQ协议和命名管道协议的端点的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中当前可用的绑定。 因此,例如, net.tcp
地址可能表示需要NetTcpBinding,NetPeerTcpBinding或NetTcpContextBinding。
net.tcp位于服务模型(WCF)命名空间中。 它由许多类表示,最明显的是NetTcpBinding类 。 因此,net.tcp本质上是一个WCF绑定('一种适用于跨机器通信的安全,可靠的绑定。')。
因此,net.tcp只能在WCF上下文中使用,并且只是基于 TCP协议。 但你不能说net.tcp = TCP。 net.tcp只使用TCP。 与其他绑定相比,它被认为是高效的,但不能互操作。
net.pipe,net.msmq的故事是相同的,它们是通过较低的Windows技术实现的WCF绑定,分别是Named Pipes和MSMQ 。
以下是系统提供的WCF绑定列表: 系统提供的绑定
这里有一篇描述wcf绑定之间差异的好文章。
这些是在Microsoft堆栈中设置的协议,作为WCF通信中的附加选项。 基本上,您可以使用工具进行通信服务。 但请注意,虽然每个人可能会有不同的好处,但Microsoft为WCF提出的net *协议与这些服务的非WCF(和非Microsoft)消费者不能很好地协作。 如果需要考虑互操作性,它们可能会在以后引起麻烦。
前缀.net表明框架作者已经包装了协议,为您提供了一个隐藏复杂性并使开发人员更容易使用它的API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.