是否可以使用WCFDiscovery来公开使用命名管道的WCF端点?我有一个使用发现的应用程序,可以在同一台PC上本地部署,也可以从它使用的服务远程部署。有没有办法通过WCF发现公开命名管道绑定?如果没有,我想我可以在发现服务后协商最合适的绑定。是的,这是可以做到的。但是由于该地址将被列为“localhost”(net.pipe唯一可能的地址),您可能需要进行某种测试以验证该服务是否确实在与发现客户端相同的机器上运行。C#学习教程就是这些:是否可以使用WCFDiscovery来使用命名管道公开WCF端点?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicclassStackOverflow_7068743{[ServiceContract]publicinterfaceITest{[OperationContract]stringEcho(stringtext);}publicclassService:ITest{publicstringEcho(stringtext){returntext+"(via"+OperationContext.Current.IncomingMessageHeaders.To+")";}}publicstaticvoidTest(){stringbaseAddressHttp="http://"+Environment.MachineName+":8000/Service";stringbaseAddressPipe="net.pipe://localhost/Service";ServiceHosthost=newServiceHost(typeof(Service),newUri(baseAddressHttp),newUri(baseAddressPipe))host.Description.Behaviors.Add(newServiceDiscoveryBehavior());host.AddServiceEndpoint(newUdpDiscoveryEndpoint());host.AddServiceEndpoint(typeof(ITest),newBasicHttpBinding(),"");host.AddServiceEndpoint(typeof(ITest),newNetNamedPipeBinding(NetNamedPipeSecurityMode.None),"");主机.Open();Console.WriteLine("主机打开");DiscoveryClientdiscoveryClient=newDiscoveryClient(newUdpDiscoveryEndpoint());FindResponsefindResponse=discoveryClient.Find(newFindCriteria(typeof(ITest)));Console.WriteLine(findResponse.Endpoints.Count);EndpointAddressaddress=null;Bindingbinding=null;foreach(varendpointinfindResponse.Endpoints){if(endpoint.Address.Uri.Scheme==Uri.UriSchemeHttp){address=endpoint.Address;binding=newBasicHttpBinding();}elseif(endpoint.Address.Uri.Scheme==Uri.UriSchemeNetPipe){address=endpoint.Address;binding=newNetNamedPipeBinding(NetNamedPipeSecurityMode.None);break;//这是首选}Console.WriteLine(endpoint.Address);}if(binding==null){Console.WriteLine("Noknownbindings");}else{ChannelFactoryfactory=newChannelFactory(binding,address);ITestproxy=factory.CreateChannel();Console.WriteLine(proxy.Echo("Hello"));((IClientChannel)proxy).Close();factory.Close();}Console.Write("按回车键关闭主机");控制台.ReadLine();主机.Close();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。转载请注明出处:
