NetNamedPipeBindingでメッセージを送信するWindowsサービスを実行しています。メッセージは、GPOによってトリガーされるクライアントアプリケーションから送信されます。サービスとクライアントを新しいサーバーにインストールしたところ、次のメッセージが表示されます。C#でNetNamedPipeBindingでEndpointNotFoundExceptionを取得しています。グローバル名前付きパイプを作成する必要があります
System.ServiceModel.EndpointNotFoundException:
There was no endpoint listening at
net.pipe://localhost/VOXAServices/VOXADefaultPipe that could accept the
message. This is often caused by an incorrect address or SOAP action.
See InnerException, if present, for more details.
内部例外はありません。デスクトップ上のアイコンをダブルクリックしてクライアントアプリケーションを実行すると、問題なく実行されます。私は、Windowsサービスとクライアントアプリケーションの両方のコードを管理しているので、必要なものを変更することができます。しかし、これまでのところ、バインディング、契約、アドレスはすべて正しいと確信しています(デスクトップから実行するとすべて正常に動作するため)。問題はクライアントアプリケーションがGPOから実行されている必要があります。しかし、私はこのエラーの原因となる理由は考えられません。
UPDATE:
私は、MicrosoftのWebサイト上でこの本を読んで:
名前付きパイプが缶を処理し、共有メモリのセクションとして、Windowsオペレーティングシステムのカーネルは、そのような にオブジェクトであります 通信に使用します。名前付きパイプには名前があり、1つのマシン上で一方向または2つのプロセス間の通信を二重化するために使用できます。
1台のコンピュータで異なるWCFアプリケーション間で通信が必要な場合に、別のマシンの からの通信を防止したい場合は、名前付きパイプトランスポートを使用します。 の制限があります。 権限が昇格していない限り、Windowsリモートデスクトップから実行されているプロセスは が同じWindowsリモートデスクトップセッションに制限されている可能性があります。
(Choosing a Transport、強調追加)
私は(非特権)ユーザーのコンテキストで実行するクライアントプロセスを必要とUACダイアログポップアップを持つことはオプションではありません。このクライアントプロセスに昇格された特権を与え、プロセスをユーザーコンテキストで実行しながら、ユーザーに特権を与えないようにしてもらえますか?
UPDATE#2:
グローバルとローカルの名前付きパイプ(Windowsセッションに)のようなものがあることが表示されます。私はWindowsサービスがローカルの名前付きパイプを作成していると私はグローバルな名前付きパイプを作成するように強制することができれば、それは私の問題を解決するだろうと思う。 (これは、私のクライアントアプリケーションが特権セッションから起動した場合でもそれを見つけることができたとしても、なぜsysinternalsの "Process Explorer"でパイプが見えないのかを説明しています)。問題は、名前付きパイプをグローバルに強制的に作成する方法(c#)を知りません(わかりません)。何か案は?