元数据的发布有两种方法:
1.在配置文件发布服务元数据
2.在代码中发布服务元数据
一:在配置文件发布服务元数据
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Wrox.CarRentalService.Implementations.Europe.CarRentalService"
behaviorConfiguration="CarRentalServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/CarRentalService"/>
</baseAddresses>
</host>
<endpoint address=""
contract="Wrox.CarRentalService.Contracts.ICarRentalService"
binding="basicHttpBinding">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CarRentalServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
二:在代码中发布服务元数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Wrox.CarRentalService.Implementations.Europe;
using System.ServiceModel;
using System.ServiceModel.Description;
using Wrox.CarRentalService.Contracts;
namespace Service
{
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(CarRentalService), new Uri("http://localhost:8080/CarRentalService"));
ServiceMetadataBehavior serviceMetadata =
host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (serviceMetadata == null)
{
serviceMetadata = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(serviceMetadata);
}
serviceMetadata.HttpGetEnabled = true;
BasicHttpBinding binding = new BasicHttpBinding();
host.AddServiceEndpoint(typeof(ICarRentalService), binding, "http://localhost:8080/CarRentalService");
try
{
host.Open();
Console.WriteLine("The car rental service is up.");
Console.ReadLine();
host.Close();
}
catch (CommunicationException ex)
{
host.Abort();
Console.WriteLine(ex);
}
catch (TimeoutException ex)
{
host.Abort();
Console.WriteLine(ex);
}
catch (Exception ex)
{
host.Abort();
Console.WriteLine(ex);
}
}
}
}