我正在尝试通过 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);
}
服务启动正常,但是当我创建一个新的 Visual Studio 项目并尝试在 location 添加服务引用时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 中添加服务引用?