假设我有一个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;绑定客户端正在使用。感谢
答案 0 :(得分:3)
为什么你关心这个?总的来说,您的服务真的不应该关心客户端用于获取服务的绑定(如果这会影响服务行为)(在这种情况下,拥有多个单独的服务可能更有意义)。
那就是说,我认为一种可能的方法是查看服务的端点地址,我认为你可以使用这样的东西(未经测试):
var opCtxt = OperationContext.Current;
var epAddress = opCtxt.EndpointDispatcher.EndpointAddress;
var uri = epAddress.Uri;