以编程方式将元数据端点添加到服务

如果你还希望在没有配置文件的情况下公开元数据,则可以通过编程方式创建 ServiceHost 来构建示例:

public ConsoleHost()
{
    mHost = new ServiceHost(typeof(Example), new Uri("http://localhost:8000/Example"), new Uri("net.tcp://9000/Example"));

    NetTcpBinding tcp = new NetTcpBinding();

    mHost.AddServiceEndpoint(typeof(IExample), tcp, "net.tcp://localhost:9000/Example");            

    ServiceMetadataBehavior metaBehavior = mHost.Description.Behaviors.Find<ServiceMetadataBehavior>();

    if (metaBehavior == null)
    {
        metaBehavior = new ServiceMetadataBehavior();
        metaBehavior.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        metaBehavior.HttpGetEnabled = true;

        mHost.Description.Behaviors.Add(metaBehavior);
        mHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
    }

    mHost.Open();
}
  1. 创建一个 ServiceHost 实例,传递具体的类类型和零个或多个 baseaddress Uri。
  2. 当你使用 mexHttpBinding 时,你必须添加 http:// localhost:8000 /示例 baseaddress
  3. 在这种情况下构造所需的绑定 NetTcpBinding。
  4. 调用 AddServiceEndpoint 传递 Address,Binding 和 Contract。 (ABC)。
  5. 构造 ServiceMetadataBehavior
  6. 将 HttpGetEnabled 设置为 true
  7. 将元数据行为添加到 behavior 集合。
  8. 调用 AddServiceEndpoint 传递常量以进行元数据交换
  9. 打开主机。