天天看点

第四章 Binding --.Net应用下的跨机器通信

.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>

------------------------------------------------