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

smw*_*dia 22 wcf

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

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

非常感谢.

Phi*_*rdt 34

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

类似地,net.msmqnet.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
Run Code Online (Sandbox Code Playgroud)

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.

  • 因为当http运行在tcp之上时我们简单地称它为"http"而tcp上的ftp简称为"ftp"而tcp之上的bittorrent是"torrent"(对于所有其他互联网协议也是如此)我认为微软应该将其命名为"net.wcf"而不是"net.tcp". (5认同)

Sim*_*ier 5

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

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

net.pipe 和 net.msmq 的情况相同,它们是通过较低 Windows 技术(分别为命名管道MSMQ)实现的 WCF 绑定。

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


duf*_*ymo 1

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