WCF笔记1:metadata
25 Jun 2012采用wsHttpBinding绑定。
下面的代码显示了wsHttpBinding绑定的地址格式:
http://{hostname}:{port}/{service location}
https://{hostname}:{port}/{service location}
http协议的默认端口是80而https的默认端口是443。
实现metadata暴露的方法有二:
1.在Hosting代码中编写:
using System; using System.ServiceModel; using System.ServiceModel.Description; using Contracts; using Services; namespace Hosting { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(Services.Services))) { host.AddServiceEndpoint(typeof(ICaculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice"); if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) { ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); behavior.HttpGetEnabled = true; behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata"); host.Description.Behaviors.Add(behavior); } host.Opened += delegate { Console.WriteLine("CalculatorService已经启动,按任意键终止服务"); }; host.Open(); Console.Read(); } } } }
2.在App.config文件中进行配置
此时可以把Hosting改写为:
using System; using System.ServiceModel; using System.ServiceModel.Description; using Contracts; using Services; namespace Hosting { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(Services.Services))) { host.Opened += delegate { Console.WriteLine("CalculatorService已经启动,按任意键终止服务"); }; host.Open(); Console.Read(); } } } }
App.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="metadataBehavior"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/calculatorservice/metadata"/> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="metadataBehavior" name="Services.Services"> <endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding" contract="Contracts.ICaculator"/> </service> </services> </system.serviceModel> </configuration>
服务被成功寄宿后,服务端便开始了服务调用请求的监听工作。此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据,创建客户端程序进行服务的消费。在VS下,当我们添加服务引用的时候,VS在内部帮我们实现元数据的获取,并借助这些元数据通过代码生成工具(svcutil.exe)自动生成用于服务调用的服务代理相关代码和相应的配置。
转载请注明:于哲的博客 » WCF笔记1:metadata