【发布时间】:2011-12-04 11:18:32
【问题描述】:
WCF 具有以下绑定选项:
- http(s)
- net.tcp
- MSMQ
几个问题:
AFAIK,http(s)实际上是TCP协议之上的更高层次的协议,而net.tcp实际上是TCP协议。那么为什么我们同时拥有它们呢?为什么不只使用一个 TCP 协议?
可以跨机器边界使用 MSMQ 吗?
如果我想有其他绑定选项,我应该怎么做?
谢谢。
【问题讨论】:
标签: wcf
WCF 具有以下绑定选项:
几个问题:
AFAIK,http(s)实际上是TCP协议之上的更高层次的协议,而net.tcp实际上是TCP协议。那么为什么我们同时拥有它们呢?为什么不只使用一个 TCP 协议?
可以跨机器边界使用 MSMQ 吗?
如果我想有其他绑定选项,我应该怎么做?
谢谢。
【问题讨论】:
标签: wcf
netTcpBinding 确实是一个“低级”协议,因此它也比 http 快一点。它在公司内部的 Intranet/本地网络环境中运行良好。
但是netTcpBinding 并不能很容易地穿过防火墙和路由器 - 您必须开始打开端口,这会带来很多安全隐患,因此通常很难完成,尤其是在大公司中。
WCF 的 http 绑定在端口 80 上工作 - 几乎可以在任何防火墙上打开 - 因此这些绑定为您提供更多覆盖范围 - 您的客户和公司外部人员可以与服务通信这样比使用netTcpBinding 更容易。
WCF 的美妙之处在于:您可以拥有一个单一服务,但您可以公开两个端点 - 一个使用netTcpBinding(快速二进制编码)本地客户端 - 以及第二个“basicHttpBinding”端点,用于从 LAN 外部调用的客户端。服务实现代码中没有需要了解这一点,无论您使用的是 nettcp 还是 http,您也不必进行不同的编程。 WCF 为您处理所有这些。
MSMQ 是一个完全不同的野兽——而 netTcp 和 http 绑定以“连接”的方式工作——你调用服务并等待答案——MSMQ 绑定是一个基于队列的系统。在这种情况下,您将请求放入队列中 - 您马上就完成了。一段时间后,队列将被某种工作进程或程序处理,并且会有所作为。而且您可能会以某种方式收到通知(电子邮件、另一个队列上的响应消息或其他东西)-但是 a) 调用服务、b) 处理消息和 c) 获得响应是完全解耦的,并且可以在几秒钟内发生-或者可能需要几天时间。 是的!当然,MSMQ 可以跨越机器边界!
【讨论】: