这一部分描述了用来在.NET应用程序间跨机器通信的绑定。我们将描述如何通过配置文件和代码来自定义每一个绑定。每一个绑定都会在一个典型场景的上下文中查看。
提示 以”net” 为前缀的绑定应该被用于.NET应用程序之间
WCF把所有在.NET应用程序之间使用的绑定加上”net”前缀。绑定名字的前缀是一个暗示,让我们知道应该选择一个特定的绑定来使用。这意味着这些绑定有特殊的仅能用于.NET应用程序的特性。相反的,所有以”ws”为前缀的绑定意味着使用Web Services的非.NET应用程序。
netTcpBinding
netTcpBinding绑定用来支持在一个网络中的不同机器间部署的.NET应用程序,包括在局域网和广域网间的通信。我们称这种类型的通信为跨机器通信。在这种情况下不需要互通性,因为两个应用程序都创建在.NET平台上。当在网络间通信时这提供给我们非常大的灵活性。因为没有互通信的需求,通信可以为最佳性能而完善。
netTcpBinding绑定使用二进制编码和TCP协议来实现在网络间的最好性能。通常建议在.NET应用程序间跨机器通信时使用netTcpBinding绑定。这不是一个硬性规定,但是覆盖了大多数情况。在防火墙将两个.NET应用程序分开时使用netTcpBinding并不合适。通常唯一能够在防火墙之间通信的方式就是使用HTTP协议。在这种情况下,你将需要使用basicHtppBinding绑定而不是netTcpBinding绑定。
下面的代码显示了netTcpBinding绑定的地址格式
net.tcp://{hostname}[:port]/{service location}
TCP协议的默认端口是808。这是任何基于TcpTransportBindingElement绑定元素,包括netTcpBinding绑定的情形。
表4.3 列出了netTcpBinding绑定可配置的绑定属性。依据具体情况,它们都是非常重要的需要了解的内容。例如,默认的netTcpBinding绑定要关掉端口共享。这会影响你的应用程序如果你打算在同一个端口寄宿多个服务的话。查看附录中”服务间共享端口”部分,”高级主题”,来获取更多关于端口共享的信息。另外一个netTcpBinding的重要属性是maxConnections. maxConnections属性限制了到终结点的连接数量。默认值是0。为了最大化吞吐量这个值需要增加。
表4.3 netTcpBinding 属性
属性名字 | 描述 | 默认值 |
listenBacklog | 等待服务请求的最大信道数量。任何比这个值大的连接都会被放入队列中去。 | 10 |
maxBufferPoolSize | 传输中缓存池的最大容量. | 524,888 |
maxBufferSize | 用来在内存中缓存接收到的消息的最大字节数。 | 65,536 |
maxConnections | 入列和出列的最大连接数。入列和出列分别计算。 | 10 |
maxReceivedMessageSize | 一条接收到的消息的最大长度. | 65,536 |
name | 绑定名字. | n/a |
openTimeout | 等待一个打开操作完成的最大时间. | 00:01:00 |
portShareingEnabled | 为服务监听器开启端口共享 | false |
readerQuotas | 确定可以处理的消息的最大复杂度(比如,大小). | n/a |
receiveTimeout | 等待一个接收操作完成的最大时间. | 00:01:00 |
reliableSession | 确定绑定是否支持使用WS-Reliable通信的精确消息传输. | n/a |
Security | 确定绑定的安全设置. | n/a |
sendTimeout | 等待一次发送操作完成的最大时间. | 00:01:00 |
transactionFlow | 使能客户端和服务端之间的事务流转. | false |
transactionProtocol | 支持的事务类型-OleTransactions或WSAtomicTransactions | OleTransactions |
n/a-意味着这个设置是一个需要多个属性被设置的子节点元素或者依赖于其他属性的设置才能使用。
下面的配置信息是用来与列表4.2到4.4的示例程序一起使用的。列表4.7中的配置文件使用netTcpBinding绑定来暴露StockQuoteService服务。
列表 4.7 netTcpBinding 寄宿配置
列表4.8 显示了调用列表4.7中显示的使用netTcpBinding 绑定的服务的客户端配置文件。
列表4.8 netTcpBinding客户端配置