下面的wcf配置中,有两个终结点,为什么配置成这样呢?
<service name="SMotionHardwareLayer.MotionCardRes.DMC3400A.AxisRealization" behaviorConfiguration="Dmc3000IAxisAPI"> <host> <baseAddresses> <add baseAddress="net.pipe://localhost/Dmc3000IAxisAPI"/> </baseAddresses> </host> <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="" contract="SMotionHardwareLayer.HardwareLayerService.IAxis"/> <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange"/> </service>
在WCF(Windows Communication Foundation)的配置中,可以有多个端点(<endpoint>),
因为每个端点代表一个独立的通信通道,可能用于不同的目的、绑定或契约。
在你的示例中,<service> 定义了两个端点:一个用于提供服务的业务功能,另一个用于元数据交换。
(1)业务功能端点:
<endpoint address="" binding="netNamedPipeBinding" bindingConfiguration=""
contract="SMotionHardwareLayer.HardwareLayerService.IAxis"/>
这个端点使用 netNamedPipeBinding,这是WCF中用于在同一台机器上的进程间通信的绑定。
address 属性为空,意味着它将使用 <host> 元素中定义的 baseAddresses 作为其基础地址。
这个端点实现的契约(contract)是 SMotionHardwareLayer.HardwareLayerService.IAxis,
它代表了服务的业务功能。客户端通过这个端点与服务进行交互,调用服务定义的操作。
(2)元数据交换端点:
<endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange"/>
这个端点用于提供服务的元数据。它使用 mexNamedPipeBinding,这是一个专门为元数据交换设计的绑定。
address 属性设置为 "mex",这通常是一个标准的地址后缀,用于指示这个端点是用于元数据交换的。
contract 属性设置为 IMetadataExchange,这是WCF中用于元数据交换的标准接口。
元数据交换端点的存在允许客户端或其他工具(如Visual Studio的“添加服务引用”功能)
通过请求服务的元数据来动态了解服务提供的操作和数据类型。
这使得客户端可以自动生成必要的代理代码,从而与服务进行通信。
总结来说,有两个端点是因为它们各自服务于不同的目的:
一个用于业务逻辑交互,另一个用于提供服务的元数据,以便客户端可以动态地了解和使用服务。
这是WCF设计中常见的模式,用于分离服务的功能性方面和发现性方面。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

