.Net应用下的跨机器通信
这一节描述.Net应用下跨机器通信的绑定。我们将演示如何在配置和代码中自定义每个绑定。默认的方案中每个binding都会被重新评定。
提示:已“net”开始的binding应该用于.Net应用
所有标有“net”前缀的binding应该使用在.net程序中哦你,binding的前缀名标识出你应该如何选择。这就是说,这些binding有某些特别的性质只能在.Net程序中使用。相反的,已“ws”做前缀的binding名是表示非.net程序的Webservice交互。
netTcpBinding
netTcpBinding设计用来在跨网络的单机中的.Net应用间通信,包括内网和互联网通信。我们将这类通信称作跨机通信。在这种解决方案中并不需可互操作性,因为所有的程序都是构建在.Net上。这就让我们跨网络通信是获得了很大的灵活性。因为没有可互操作性的需求存在,通信将可以采用最优化的执行。
netTcpBinding使用二进制编码和TCP协议来获得跨网络的最佳性能。在.NET程序间跨机通信采用netTcpBinding绑定是通常的做法。虽然这不是硬性规定,但这可以用在多数解决方案中。比如当两个.Net程序间有个防火墙分隔这时采用netTcpBinding就不合适了,而这种情况下要想能穿越防火墙通信你只能使用HTTP了。对于这个解决方案,你将需要一个支持HTTP协议的binding,你可以使用basicHttpBinding而不是采用netTcpBinding。
下面是netTcpBinding的地址格式:
net.tcp//{hostname}[:port]/{service location}
TCP协议的默认端口是808。这种情况适合所有基于TcpTransportBindingElement的元素的绑定。自然也包括netTcpBinding。
表4.3列出了netTcpBinding的可配置的binding属性。这些都是必须知道的。比如,netTcpBinding默认是关闭端口共享的。如果你想使用一个端口托管多个服务这将是很重要的。关于端口共享的更多信息可以参考附录"高级指南"中的"服务间共享端口"章节。netTcpBinding中另一个重要的属性是maxConnections。maxConnections属性限制了endpoint的连接数量。它的默认值是10。为了获得更多的吞吐量可以增加此值。
表4.3
下面的配置是清单4.2到4.4所展示的实例程序的配置信息。清单4.7展示了使用netTcpBinding公开StockQuoteService服务的配置信息。
清单4.7 netTcpBinding 主机配置
------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="EssentialWCF.StockQuoteService">
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost:9090/StockQuoteService" />
</baseAddresses>
</host>
<endpoint address="" binding="netTcpBinding" contract="EssentialWCF.IStockQuoteService" />
</service>
</services>
</system.serviceModel>
</configuration>
------------------------------------------------
清单4.8展示了使用netTcpBinding的服务端被客户端消费的配置
------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint address="net.tcp://localhost/stockquoteservice"
binding="netTcpBinding"
contract="EssentialWCF.IStockQuoteServce">
</endpoint>
</client>
</system.serviceModel>
</configuration>
------------------------------------------------