2013-02-21 107 views
0

我正在创建一个Windows服务,应该承载WCF服务与NetNamedPipeBinding绑定。以下是代码:无法启动承载与NetNamedPipeBinding WCF服务的Windows服务

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的和他们很好地工作。

回答

3

您需要从net.pipe URI中删除端口号。尝试改变线41:

var baseNamedPipeUri = new Uri("net.pipe://MyWorkstation/"); 

,或者如果你需要一个更具描述性的管道名称:

var baseNamedPipeUri = new Uri("net.pipe://MyWorkstation_51301/"); 

This blog post在这个问题上的一些有益的见解。

+1

谢谢。有效。 – Kabeer 2013-02-21 06:38:42