[Programming WCF Services]Chapter 1. WCF Essentials - Metadata Exchange

1.HTTP-GET WCF 方式

通过Http的方式提供metadata

1.1.配置文件方式

<system.serviceModel>
  <services>
    <service name = "MyService" behaviorConfiguration = "MEXGET">
      <host>
        <baseAddresses>
          <add baseAddress = "http://localhost:8000/"/>
        </baseAddresses>
      </host>
      ...
    </service>

    <service name = "MyOtherService" behaviorConfiguration = "MEXGET">
      <host>
        <baseAddresses>
          <add baseAddress = "http://localhost:8001/"/>
        </baseAddresses>
      </host>
      ...
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name = "MEXGET">
        <serviceMetadata httpGetEnabled = "true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

 一般通过HTTP的基地址即可以访问元数据,也可以指定不同的地址:

<behavior name = "MEXGET">
  <serviceMetadata httpGetEnabled = "true" httpGetUrl = "MyMEXAddress"/>
</behavior>

 

 

1.2.代码方式

ServiceHost host = new ServiceHost(typeof(MyService));
ServiceMetadataBehavior metadataBehavior;
metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if(metadataBehavior == null)
{
Debug.Assert(BaseAddresses.Any(baseAddress=>baseAddress.Uri.Scheme == "http"));
metadataBehavior = new ServiceMetadataBehavior();
metadataBehavior.HttpGetEnabled = true;
host.Description.Behaviors.Add(metadataBehavior);
}
host.Open();

 

 

2.Metadata Exchange Endpoint

平台无关的元数据交换方式,支持多种协议

<services>
  <service name = "MyService" behaviorConfiguration = "MEX">
    <host>
      <baseAddresses>
        <add baseAddress = "net.tcp://localhost:8001/"/>
        <add baseAddress = "net.pipe://localhost/"/>
      </baseAddresses>
    </host>
    <endpoint
    address = "MEX"
    binding = "mexTcpBinding"
    contract = "IMetadataExchange"
/>
    <endpoint
    address = "MEX"
    binding = "mexNamedPipeBinding"
    contract = "IMetadataExchange"
/>
    <endpoint
    address = "http://localhost:8000/MEX"
    binding = "mexHttpBinding"
    contract = "IMetadataExchange"
/>
    ...
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name = "MEX">
      <serviceMetadata/>
    </behavior>
  </serviceBehaviors>
</behaviors>

 

posted @ 2016-03-06 22:11  SillyProgrammer  阅读(140)  评论(0编辑  收藏  举报