元数据的配置、交换 WCF服务元数据是WCF服务的核心部分服务地址(Address)、绑定(通信协议Binding)、契约(服务、操作、数据Contract)的原始描述信息。服务所公开的元数据包括 XSD(文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值)和 WSDL 文档(用于描述服务的方法、参数、参数个数、顺序、返回值、返回值的类型等方法的相关信息)。.Disco文档(描述服务的协议、地址、命名空间等信息)。 元数据的信息除了包括服务、数据、操作等契约的相关的信息外,还有其他的如事物、可靠性、错误处理等相关的信息。 两种发布元数据的方式使用了两种不同的标准网络传输协议,前者为HTTP/GET请求,后者为WS-MetadataExchange(MEX:WCF支持的基本绑定HTTP、HTTPS、TCP、IPC等绑定协议)。要了解这两种协议的区别,得先了解一下什么事WS-MEX:
他们的区别可以体现在WS-*上,在使用WS-MEX以后,我们可以使用其他WS-*相关的标准来展示端点的元数据,比如WS-Secyrity。WS-MEX默认是使用httpBinding。
1.HTTP GET方式
配置方式:
<behaviors> 在设置httpGetEnabled="true"以后便会在我们的服务帮助页面( 帮助页面可以设置行为的<serviceDebug httpHelpPageEnabled="false"/>关闭)的SvcUtil.exe指令之后带一个?WSDL后缀的活动链接,点击该链接,便会进入该服务的WSDL文档中。 httpGetUrl 属性, 如果httpGetEnabled为true,这个属性指示使用哪个URL地址发布服务的WSDL。 要发布Metadata,需要对外提供一个Http的地址,由HttpGetUrl 属性指定。 如果HttpGetUrl指定了绝对地址,那么对外发布Metadata的地址就为:HttpGetUrl 后加?wsdl。 如果HttpGetUrl指定了相对地址,那么对外发布Metadata的地址就为: ServiceHost的baseAddress + HttpGetUrl 后加?wsdl。 如果没有设置HttpGetUrl,那么Metadata的地址就是ServiceHost的baseAddress后加?wsdl 不管HttpGetUrl属性怎么设置,ServiceHost的baseAddress总是作为这个ServiceHost提供服务的描述页面的URL。
<service behaviorConfiguration="NewBehavior" name="Messaging.Host.Service"> <endpoint address="" binding="basicHttpBinding" contract="Messaging.Host.IService" /> <host> <baseAddresses> <add baseAddress="http://localhost:8080/WCFService/Service" /> </baseAddresses> </host> </service> 那么,他的WSDL就是http://localhost:8080/WCFService/Service?WSDL 代码方式:
ServiceMetadataBehavior metadataBehavior;//定义服务行为变量, = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); 首先是获得服务行为的列表信息,如果没有设置,我们就进行实例化服务原数据交换行为,并设置http方式可用。 host.Description.Behaviors.Add(metadataBehavior);添加宿主服务的行为。 2.WS-MEX 配置方式: 这里配置了3种方式的元数据交换终结点,分别是HTTP、TCP、IPC方式。
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
元数据的地址就是对应的baseAddress/mes。比如http://localhost:8001/mex 代码方式:
//2编程方式实现ws*原数据交,声明三个绑定节点类 参考: http://www.cnblogs.com/frank_xl/archive/2009/03/30/1421862.html http://www.cnblogs.com/chnking/archive/2008/01/21/1047754.html http://www.cnblogs.com/chnking/archive/2008/01/22/1049345.html http://www.cnblogs.com/jillzhang/archive/2008/01/30/1059169.html |
|