2013-06-12 31 views
4

我试图通过NetNamedPipeBinding公开一个接口。将mex端点添加到NetNamedPipeBinding

这是我做的:

 try 
     { 
      //load the shedluer static constructor 
      ServiceHost svh = new ServiceHost(typeof(MyClass)); 

      var netNamedPipeBinding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None); 

      var netNamedPipeLocation = "net.pipe://localhost/myservice/"; 
      svh.AddServiceEndpoint(typeof(IMyInterface), netNamedPipeBinding, netNamedPipeLocation); 

      // Check to see if the service host already has a ServiceMetadataBehavior 
      ServiceMetadataBehavior smb = svh.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
      // If not, add one 
      if (smb == null) 
       smb = new ServiceMetadataBehavior(); 

      smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
      svh.Description.Behaviors.Add(smb); 

      // Add MEX endpoint 
      svh.AddServiceEndpoint(
       ServiceMetadataBehavior.MexContractName, 
       MetadataExchangeBindings.CreateMexNamedPipeBinding(), 
       netNamedPipeLocation + "/mex" 
       ); 

      svh.Open(); 

      Console.WriteLine("Service mounted at {0}", netNamedPipeLocation); 
      Console.WriteLine("Press ctrl+c to exit"); 

      ManualResetEvent me=new ManualResetEvent(false); 
      me.WaitOne(); 
      svh.Close(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Exception"); 
      Console.WriteLine(e); 
     } 

服务启动OK,但是当我创建一个新的Visual Studio项目,并尝试添加在位置net.pipe://localhost/myservice/服务的参考,我得到以下错误:

The URI prefix is not recognized. 
Metadata contains a reference that cannot be resolved: 'net.pipe://localhost/myservice/'. 
Metadata contains a reference that cannot be resolved: 'net.pipe://localhost/myservice/'. 
If the service is defined in the current solution, try building the solution and adding the service reference again. 

如果我将NetNamedPipeBinding替换为TcpBinding,则代码可以正常工作,并且可以添加服务引用。

我应该改变什么,所以我可以在Visual Studio中添加服务引用?

回答

2

With var netNamedPipeLocation = "net.pipe://localhost/myservice/";netNamedPipeLocation + "/mex"结尾为net.pipe://localhost/myservice//mex。您的通话AddServiceEndPoint

svh.AddServiceEndpoint(
      ServiceMetadataBehavior.MexContractName, 
      MetadataExchangeBindings.CreateMexNamedPipeBinding(), 
      netNamedPipeLocation + "mex" 
      ); 

去除多余之后/我是能够连接到本地命名管道服务中使用你的代码没有问题主持。

+0

哇。我怎么可能错过了? )) –