繁体   English   中英

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

[英]what's the difference between net.tcp and TCP protocol?

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

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

非常感谢。

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

类似地, net.msmqnet.pipe分别是用于解决利用MSMQ协议命名管道协议的端点的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中当前可用的绑定。 因此,例如, 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 PipesMSMQ

以下是系统提供的WCF绑定列表: 系统提供的绑定

这里有一篇描述wcf绑定之间差异的好文章。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM