WCF NetNamedPipeBinding に問題があります。Windows XP マシンで Visual Studio 2008 を使用してサーバー コードとクライアント コードを実行すると、すべて正常に動作します。しかし、サーバーを Windows サービスとして展開し、クライアント アプリを Windows Server 2008 にインストールするとすぐに、コントラクト メソッドを使用しようとすると、クライアント エンドで TimeoutException が発生します。クライアントを正常に作成して開くことができるようですが、どのメソッドも呼び出すことができません。
サービス初期化コード:
Uri baseAddress = new Uri("http://localhost:8500/xNet/xNetService");
string address = "net.pipe://localhost/xNet/xNetService";
_xNetAPIServiceHost = new ServiceHost(typeof(xNetService), baseAddress);
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
_xNetAPIServiceHost.AddServiceEndpoint(typeof(IServiceAPI), binding, address);
// Add a mex endpoint
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8501/xNet/xNetService/mex");
_xNetAPIServiceHost.Description.Behaviors.Add(smb);
_xNetAPIServiceHost.Open();
クライアント初期化コード:
string address = "net.pipe://localhost/xNet/xNetService";
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
_serviceClient = new ServiceAPIClient(binding, new EndpointAddress(address));
_serviceClient.Open();
Windows サービスは「ローカル システム アカウント」として実行されます。何が問題なのか途方に暮れています。セキュリティ アカウントの問題なのか、それとも名前付きパイプが開いているのかさえわかりません。クライアント側を正常に作成して開くことができるので、少なくとも名前付きパイプが見つかったように見えると思います。TimeoutException がなければ、どのサービス メソッドも呼び出すことができません。