如何从wcf服务端检测绑定

时间:2014-02-08 15:28:37

标签: wcf wcf-binding wcf-endpoint

假设我有一个wcf服务,其中多个端点具有不同类型的绑定,如tcp,basichttp,wshttp等。

<endpoint address ="" binding="wsHttpBinding"
                contract="NorthwindServices.ServiceContracts.ICustomerService"
                bindingNamespace = "http://dotnetmentors.com/services/customer" />
    <endpoint address="mex" binding="mexHttpBinding" 
                 contract="IMetadataExchange"/>

    <endpoint address ="" binding ="netNamedPipeBinding" 
                contract ="NorthwindServices.ServiceContracts.ICustomerService"
                bindingNamespace = "http://dotnetmentors.com/services/customer"  />
    <endpoint address="mex" binding="mexNamedPipeBinding" 
                 contract="IMetadataExchange"/>

因此客户端可以使用具有不同绑定的任何端点来调用我的服务。当客户端进行调用并且请求将转到服务端时,我怎么能以编程方式检测哪个绑定客户端正在使用...是tcp,basichttp,wshttp?

所以引导我使用代码示例,它帮助我从服务中检测出哪个协议&amp;绑定客户端正在使用。感谢

1 个答案:

答案 0 :(得分:3)

为什么你关心这个?总的来说,您的服务真的不应该关心客户端用于获取服务的绑定(如果这会影响服务行为)(在这种情况下,拥有多个单独的服务可能更有意义)。

那就是说,我认为一种可能的方法是查看服务的端点地址,我认为你可以使用这样的东西(未经测试):

var opCtxt = OperationContext.Current;
var epAddress = opCtxt.EndpointDispatcher.EndpointAddress;
var uri = epAddress.Uri;