1

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)

WSHttpBindingNetTcpBindingを試しましたが、正常に動作します。

4

1 に答える 1

4

net.pipeURIからポート番号を削除する必要があります。41行目を次のように変更してみてください。

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

または、よりわかりやすいパイプ名が必要な場合:

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

このブログ投稿には、この問題に関するいくつかの役立つ洞察があります。

于 2013-02-21T06:29:30.557 に答える