代码改变世界

WCF 第四章 绑定 在多个绑定上暴露一个服务契约

2010-11-30 12:52  DanielWise  阅读(2476)  评论(0编辑  收藏  举报

这一章的之前部分描述了使用netTcpBinding和wsHttpBinding绑定暴露服务。这些绑定中的每一个都用来支持特殊通信场景。例如,netTcpBinding绑定对于.NET应用程序间的通信是很理想的,wsHttpBinding绑定支持使用Web 服务的不同平台间的通信,basicHttpBinding绑定支持不支持高级协议的Web 服务间的通信。

   通过在一个服务中使用多个终结点,你可以配置一个服务通过多个绑定暴露它的能力,这就像在第二章”一个服务中的多个契约和终结点”描述的那样。这意味着客户端可以使用更多被支持的可选绑定来连接到服务端。通用的场景是使用netTcpBinding绑定把一个服务暴露给一个.NET应用程序,使用wsHttpBinding绑定把同样的服务暴露给一个Java应用程序,使用basicHttpBinding绑定再次把服务暴露给原有的旧的客户端。

   WCF通过将下层通信抽象出来并让开发人员专注于创建服务完成了这个。它们是怎么样暴露出来的并不重要只要绑定支持应用程序需求的特性就可以。这意味着一个服务可以使用不同的绑定暴露。

注意 当创建交互服务时使用多个绑定

使用多个绑定暴露一个服务的能力带来了非常大的灵活性。你可以同时使用不同的绑定来暴露服务。这允许一个服务暴露同时给一个WCF客户端和一个非WCF客户端并且不会因为交互导致性能降低。例如,你可以同时使用netTcpBinding和wsHttpBinding来暴露一个服务。netTcpBinding可以在WCF客户端使用而wsHttpBinding可以在非WCF客户端使用(比如Java).仅需要记得你使用的所有绑定要支持你的应用程序的需求。例如,你不能通过不支持事务绑定来暴露一个需要事务处理的服务。

  暴露一个服务给一个.NET应用和一个Java应用仅是使用多个绑定的例子。另外一个例子是暴露一个服务给一个网络浏览器和一个.NET Windows应用程序。使用多个绑定暴露一个服务的例子在列表4.36显示。

列表4.36 使用多个绑定的宿主配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="EssentialWCF.StockQuoteService">
        <endpoint address="http://localhost/wshttpendpoinit" 
                  binding="wsDualHttpBinding"
                  contract="EssentialWCF.IStockService" />
        <endpoint address="net.tcp://localhost/nettcpendpoint"
                  binding="netTcpBinding"
                  contract="EssentialWCF.IStockQuoteService" />
      </service>
    </services>
  </system.serviceModel>
</configuration>