[WCF] Metadata Exchange
WCF 服务可以通过两种途径发布他们的元数据,这些元数据可以通过 HTTP-GET 传送或者直接通过 Endpoint 发布。如果通过 HTTP-GET 来发布元数据,你所要做的只是在配置文件中为 service 节点添加 behaviorConfiguration 属性并激活 HTTP-GET 而已。(完整的配置文件样例可以参考 http://www.cnblogs.com/anders-x-hu/archive/2007/05/30/765449.html)
编程控制元数据
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
namespace Anrs.Service
{
class Program
{
static void Main(string[] args)
{
ServiceHost sh = new ServiceHost(typeof(AnrsService));
ServiceMetadataBehavior metadata = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
Binding wsHttpBinding = new WSHttpBinding();
if (metadata == null)
{
metadata = new ServiceMetadataBehavior();
metadata.HttpGetEnabled = true;
sh.Description.Behaviors.Add(metadata);
}
sh.AddServiceEndpoint(typeof(IAnrsServiceContract1), wsHttpBinding, new Uri("http://localhost:8086/AnrsService/"));
sh.Open();
Console.Write("Press any key to exit");
Console.ReadLine();
sh.Close();
}
}
}
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
namespace Anrs.Service
{
class Program
{
static void Main(string[] args)
{
ServiceHost sh = new ServiceHost(typeof(AnrsService));
ServiceMetadataBehavior metadata = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
Binding wsHttpBinding = new WSHttpBinding();
if (metadata == null)
{
metadata = new ServiceMetadataBehavior();
metadata.HttpGetEnabled = true;
sh.Description.Behaviors.Add(metadata);
}
sh.AddServiceEndpoint(typeof(IAnrsServiceContract1), wsHttpBinding, new Uri("http://localhost:8086/AnrsService/"));
sh.Open();
Console.Write("Press any key to exit");
Console.ReadLine();
sh.Close();
}
}
}
再次证明 WCF 并不是 Programming 的创新,更多的是概念方面的创新。