WCF 第四章 绑定 跨机器通信
2011-06-26 19:47 DanielWise 阅读(1636) 评论(2) 编辑 收藏 举报这一部分描述了用来在.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 属性
n/a-意味着这个设置是一个需要多个属性被设置的子节点元素或者依赖于其他属性的设置才能使用。
下面的配置信息是用来与列表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">
<endpoint address="" binding="netTcpBinding" bindingConfiguration=""
name="myEndpoint" contract="EssentialWCF.IStockQuoteService" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost/stockquotservice" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
列表4.8 显示了调用列表4.7中显示的使用netTcpBinding 绑定的服务的客户端配置文件。
列表4.8 netTcpBinding客户端配置
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client name="EssentialWCF.StockQuoteService">
<endpoint address="" binding="netTcpBinding" bindingConfiguration=""
name="myEndpoint" contract="EssentialWCF.IStockQuoteService" />
</client>
</system.serviceModel>
</configuration>
作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。