我正在创建一个Windows服务,该服务应该通过 NetNamedPipeBinding 绑定来托管WCF服务。以下是代码:
protected override void OnStart(string[] args)
{
var serviceType = typeof(IServeHi);
var namedPipeBinding = new NetNamedPipeBinding();
namedPipeBinding.Security.Mode = NetNamedPipeSecurityMode.None;
var namedPipeEndpoint = "";
var baseNamedPipeUri = new Uri("net.pipe://MyWorkstation:51301/"); // Line # 41
host = new ServiceHost(typeof(ServeHi), baseNamedPipeUri);
host.AddServiceEndpoint(serviceType, namedPipeBinding, namedPipeEndpoint);
host.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true});
host.Open();
}
installutil.exe
能够成功安装它。但是,当我尝试启动该服务时,我收到一条消息 本地计算机上的WindowsServiceHost1已启动然后停止。如果某些服务未被其他服务或程序使用,则会自动停止 。
此外,Windows日志读作:
Service cannot be started. System.UriFormatException: Invalid URI: The hostname could not be parsed.
at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at System.Uri..ctor(String uriString)
at WindowsServiceHost1.WindowsServiceHost1.OnStart(String[] args) in C:\WindowsServiceHost1\Service1.cs:line 41
at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
我试过 WSHttpBinding & NetTcpBinding ,它们运行良好。
答案 0 :(得分:3)
您需要从net.pipe URI中删除端口号。尝试将第41行更改为:
var baseNamedPipeUri = new Uri("net.pipe://MyWorkstation/");
或者如果您需要更具描述性的管道名称:
var baseNamedPipeUri = new Uri("net.pipe://MyWorkstation_51301/");
This blog post对此问题有一些有用的见解。