而对于net.msmq、net.pipe,net前缀代表什么意思?
非常感谢。
net.tcp
是Windows中用于标识可使用TCP访问的端点的URI方案。
同样的,net.msmq
和net.pipe
是用于寻址利用MSMQ协议和Named Pipes协议的端点的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 和 Named Pipes 明显是 Microsoft 的协议,因此缺乏互操作性并不令人惊讶,但 TCP 是互联网的基础协议,因此,在 WCF 中使用它应该不是 .NET 特定的吧?
在 WCF 中,互操作性已经由 SOAP 和 HTTP 处理,这两个协议都运行在 TCP 之上。如果你想要通过 TCP 实现互操作性,则可以使用其中一种协议。
因此,Microsoft 寻求提供一种通信替代方案,其中性能而非互操作性是关键目标。TCP 是合乎逻辑的选择,但 TCP 是一个相对较低级别的协议,需要实现额外的行为和默认值,以便像 WCF 这样的消息框架可以直截了当地工作。此外,没有普遍接受的用于访问 TCP 资源的 URI 方案,因此 Microsoft 需要发明一个。因此,net.tcp
就诞生了。
虽然 URI 本身并不一定表示要使用哪种绑定,但它们确实提供了提示。根据 Simon Mourier 的答案,WCF 中当前可用的绑定可以在此处找到 (链接)。因此,例如 net.tcp
地址可能表示需要使用 NetTcpBinding、NetPeerTcpBinding 或 NetTcpContextBinding。
net.tcp存在于Service Model (WCF)命名空间中。它由许多类表示,其中最明显的是NetTcpBinding Class。因此,net.tcp本质上是一个WCF绑定(“适用于跨机器通信的安全、可靠绑定”)。
因此,net.tcp只能在WCF上下文中使用,并且仅仅基于TCP协议。但你不能说net.tcp=TCP。net.tcp只是使用TCP。与其他绑定相比,它被认为是性能高的,但不具备互操作性。
对于net.pipe、net.msmq,它们也是WCF绑定,分别在较低级别的Windows技术Named Pipes和MSMQ上实现。
这里是系统提供的WCF绑定列表:System-Provided Bindings。这些是在微软堆栈中设置的协议,作为WCF通信中的附加选项。基本上,这些是您可以用于服务通信的工具。但是,请注意,尽管每个协议可能具有不同的好处,但微软为WCF提出的net*协议与那些非WCF(和非Microsoft)消费者的服务不兼容。如果互操作性是一个问题,它们可能会在以后引起麻烦。