元数据终结点

绑定

服务之间的通信方式多种多样,传输协议多种多样,消息编码格式多种多样,消息安全保障策略多种多样...等等这些如果组合起来,其数量非常之多,并且组合这些选项,有的彼此约束,有的互斥。对大多数应用程序而言,管理这么复杂的组合并无商业价值。然而,一旦做出错误的组合,就会影响系统的性能,质量,造成严重的后果。

为了简化这些选项,方便管理,WCF引入了绑定(binding),将这些通信特征组合在一起。

WCF定义了五种常用的绑定。

  • 基本绑定

对应于BasicHttpBinding类。基本绑定使得服务看起来像是一个传统的Web服务,能够基于基本的Web服务信息进行通信。

  • TCP绑定

对应于NetTcpBinding类。TCP绑定使用TCP协议实现在Intranet中跨机器的通信。

  • IPC绑定

对应于NetNamedPipeBinding类。它使用命名管道为同意机器通信进行传输。

  • Web服务绑定

对应于WSHttpBinding类。

  • MSMQ绑定

对应于NetMsmqBinding类。

有三种使用绑定的方式:(1)如果满足需要,可以直接使用内置的绑定类型;

           (2)重新配置绑定的属性;

           (3)编写自定义绑定;

终结点(Endpoints)

服务与地址,绑定,契约有关。其中,地址定义了服务的位置,绑定定义了服务通信的方式,契约则定义了服务的内容。所以,可以这样理解,终结点就是地址,绑定,契约的混合体(ABC)。 

每一个终结点都包含了三个元素,而宿主则负责公开终结点。从逻辑上讲,终结点相当于服务的接口。

每个服务至少公开一个业务终结点,每个终结点有且只能有一个服务契约。

Address

地址的三个典型功能(服务标识/定位,辅助寻址和服务身份标识)分别对应Uri,Headers和Identity三个只读属性。

元数据交换终结点

默认情况下,服务不会发布其元数据,那么如何获得元数据?

有两种方式可以发布服务的元数据:一是基于HTTP-GET协议提供元数据,它是一种绝大多数平台都能支持的简单text-based协议;另一种是元数据交换终结点。

  • 基于HTTP-GET协议

不发布元数据,我们当然就用不了服务,使用HTTP-GET协议,那么基地址中必须有一个http协议的,假如有这么一种情况,需要用HTTP-GET协议发布服务的元数据,但是通信却使用TCP,那么至少有两个基地址

以下App.config配置如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFServer.MyService" behaviorConfiguration="MEX">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5566/"/>
            <add baseAddress="http://localhost:6655/"/>
          </baseAddresses>
        </host>
        <endpoint address="HelloWorld"
                  binding="netTcpBinding"
                  contract="WCFServer.IMyService"/>
        <!--<endpoint address="MEX"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange"/>-->
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MEX">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
  •  元数据交换终结点

基于HTTP-GET发布元数据仅仅是WCF的一个特性,它并不保证其他交互平台也会支持。元数据发布具有标准形式,即元数据交换终结点,称为MEX终结点。

既然是终结点,那么就有address,binding,contract,只不过contract是IMetadataExchange。下面配置为使用元数据交换终结点的配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFServer.MyService" behaviorConfiguration="MEX">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5566/"/>
          </baseAddresses>
        </host>
        <endpoint address="HelloWorld"
                  binding="netTcpBinding"
                  contract="WCFServer.IMyService"/>
        <endpoint address="MEX"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MEX">
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


  •  标准终结点

WCF提供了几个预定义的服务终结点,即标准终结点,配置如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFServer.MyService" behaviorConfiguration="MEX">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5566/"/>
          </baseAddresses>
        </host>
        <endpoint address="HelloWorld"
                  binding="netTcpBinding"
                  contract="WCFServer.IMyService"/>
        <endpoint address="MEX"
                  binding="mexTcpBinding"
                  kind="mexEndpoint"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MEX">
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
原文地址:https://www.cnblogs.com/HelloMyWorld/p/3051999.html