今天在WCF4.0新特性体验第3节,我们介绍WCF4.0里的标准终结点概念,也就是Standard Endpoints。
WCF4.0提供了那些标准终结点?他们有什么作用?如何使用标准终结点?如何该表标准终结点的属性?如何自定义一个标注终结点?本文会给出介绍。
WCF4.0提供了8个已经定义好的标准终结点。下面我们会给出详细介绍,然后是简单的示例代码。标准终结点并不是标准化终结点或者给终结点提供什么参考标准。这个标准终结点其实就是预定义好的终结点,WCF4.0已经内置到Framework里,我们可以直接使用。说白了,就是已经成型,可以直接使用。使用这些定义好的终结点,无非就是可以简化我们的开发工作。
【1】标准终结点介绍:
WCF4.0提供了8个已经定义好的标准终结点,它们是:mexEndpoint、announcementEndpoint、
discoveryEndpoint、udpAnnouncementEndpoint、udpDiscoveryEndpoint、workflowControlEndpoint、webHttpEndpoint、webScriptEndpoint。这些终结点其实与WCF4.0的新增特性密切相关。从名字我们基本可以看出其作用。其中与WS-Discovery服务动态发现相关的最多。包含4个:announcementEndpoint、 discoveryEndpoint、udpAnnouncementEndpoint、udpDiscoveryEndpoint。各个终结点的作用如下表:
WCF4.0里的标准终结点
名称 | 描述 |
mexEndpoint | 预定义了一个元数据交换节点,默认使用IMetadataExchange 契约和mexHttpBinding 绑定,address为空。 |
announcementEndpoint | 为discovery的声明功能预定义的标准终结点,在使用此终结点用户需要额外配置address和binding。 |
discoveryEndpoint | 为discovery 操作,预定义的一个标准终结点,在使用此终结点用户需要额外配置address和binding。 |
udpAnnouncementEndpoint | 为使用UDP binding和WS-Discovery 协议规定的多播地址的discovery的声明功能提供的预定义的终结点。它继承自announcementEndpoint。 |
udpDiscoveryEndpoint | 为discovery 操作提供的预定义的终结点。比如通过UDP binding和WS-Discovery 协议规定的多播地址的发现(find) 和解析(resolve。它继承自DiscoveryEndpoint。 |
workflowControlEndpoint | 定义了一个控制workflow 实例执行状态的标准终结点(create、run、suspend、terminate等等)。 |
webHttpEndpoint | 定义了一个配置了WebHttpBinding 和WebHttpBehavior的标准终结点。它继承自WebServiceEndpoint。在编写REST service使用。 |
webScriptEndpoint | 定义了一个配置了WebHttpBinding 和WebScriptEnablingBehavior的标准终结点。它用于编写ASP.NET AJAX程序。 |
这里EndPoint提供了2个新的属性:Kind和IsSystemEndpoint.
Kind:这里设定终结点的类别,一般是标准终结点的种类,或者用户自定义的标准终结点。如果不指定,则认为是一般的终结点。
IsSystemEndpoint:Boolean变量,设定终结点是否为系统终结点。
你可以在服务终结点里直接使用这些标准终结点。使用的方式就是在EndPoint的Kind属性里定制特定的标准终结点的类型。这些标准终结点默认使用缺省属性,当然你也可以在standardEndpoints重新定制这些属性。
【2】代码示例:
下面我们来演示一下如何使用standardEndpoints。这里主要是通过配置文件方式使用标准终结点。
(1)标准终结点:我们配置了4个服务终结点,其中3个使用了标准终结点。第一个服务终结点我们Kind不做设置,这个终结点就是普通的服务中介店。具体配置信息如下:
<services>
<service name="WCFService.WCFService">
<endpoint name="endpoint1"
address="http://localhost:8000/WCFService"
binding="wsHttpBinding"
contract="WCFService.IWCFService">
</endpoint>
<endpoint name="endpoint2" kind="webHttpEndpoint" contract="WCFService.IWCFService">
</endpoint>
<endpoint name="endpoint3" kind="udpDiscoveryEndpoint" endpointConfiguration="udp">
</endpoint>
<endpoint name="endpoint4" kind="mexEndpoint" address="mex"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/"/>
</baseAddresses>
</host>
</service>
</services>
<service name="WCFService.WCFService">
<endpoint name="endpoint1"
address="http://localhost:8000/WCFService"
binding="wsHttpBinding"
contract="WCFService.IWCFService">
</endpoint>
<endpoint name="endpoint2" kind="webHttpEndpoint" contract="WCFService.IWCFService">
</endpoint>
<endpoint name="endpoint3" kind="udpDiscoveryEndpoint" endpointConfiguration="udp">
</endpoint>
<endpoint name="endpoint4" kind="mexEndpoint" address="mex"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/"/>
</baseAddresses>
</host>
</service>
</services>
(2)运行结果:
配置完毕4个终结点以后,我们可以启动宿主查看终结点信息。终结点2、3、4标准终结点,分别引用
webHttpEndpoint、
udpDiscoveryEndpoint和mexEndpoint。运行结果如下图:
(3)覆盖属性:
如果我们感觉这些标准终结点的功能不符合要求,我们也可以通过standardEndpoints重新定制这些默认终结点的属性信息。配置代码如下:
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="udp" maxResponseDelay="00:01:00" discoveryMode="Adhoc" discoveryVersion="WSDiscovery11"/>
</udpDiscoveryEndpoint>
</standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="udp" maxResponseDelay="00:01:00" discoveryMode="Adhoc" discoveryVersion="WSDiscovery11"/>
</udpDiscoveryEndpoint>
</standardEndpoints>
这里你只需要把name应用到特定的标准终结点上即可。使用终结点配置属性,例如:
endpointConfiguration
="udp"。
(4)自定义标准终结点:
英文原文是custom standard endpoint 。我们可以定制自己的标准终结点,以便其他地方使用。这里我们需要使用extensions节点,在配置文件里指定新的标准终结点的name和type。name比如能与WCF4.0提供的标准终结点重复,而type为:namesapce,class。示例配置:
<extensions>
<endpointExtensions>
<add name="customStandEndpoint" type="WCFService.IWCFService, WCFService" />
</endpointExtensions>
</extensions>
<endpointExtensions>
<add name="customStandEndpoint" type="WCFService.IWCFService, WCFService" />
</endpointExtensions>
</extensions>
然后在服务终结点里使用:
<endpoint name="endpoint6" kind="customStandEndpoint"
address="http://localhost:8000/WCFService"
binding="wsHttpBinding"
contract="WCFService.IWCFService">
</endpoint>
address="http://localhost:8000/WCFService"
binding="wsHttpBinding"
contract="WCFService.IWCFService">
</endpoint>
【3】总结:
以上就是WCF4.0里标准终结点(standard endpoint)的介绍。目前版本,WCF4.0提供了8个已经定义好的标准终结点,它们是:mexEndpoint、announcementEndpoint、 discoveryEndpoint、udpAnnouncementEndpoint、udpDiscoveryEndpoint、workflowControlEndpoint、webHttpEndpoint、webScriptEndpoint。
(1)这些预定义的标准终结点可以方便我们的开发工作。当然也提供了属性定制功能,让我们可以根据自己的需要定制特性。
(2)不过要想利用这些标准终结点,目前还只能参考英文文档,不过英文资料也很少。(学习的时间可能需要很久。可能还不如自己配置一个终结点来的方便。)
(3)最终的标准终结点的数量或者特定参考最后的发布文档。这里还是基于Beta2。
最后给出本文的参考代码,共大家参考学习:
/Files/frank_xl/3.StandardEndpoints.zip
参考资料:
1.
http://msdn.microsoft.com/en-us/library/system.servicemodel.discovery.discoveryendpoint(VS.100).aspx
3.
http://msdn.microsoft.com/en-us/library/system.servicemodel.description.webhttpendpoint(VS.100).aspx
本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/320289
,如需转载请自行联系原作者