2011-12-15 21 views
1

WCF NetNamedPipeBindingに問題があります。 Windows XPマシンでVisual Studio 2008を使用してサーバーとクライアントのコードを実行すると、すべて正常に動作します。しかし、サーバーをWindowsサービスとして展開し、Windows Server 2008にクライアントアプリケーションをインストールするとすぐに、契約方法のいずれかを使用しようとすると、クライアント側でTimeoutExceptionが発生します。それは私が正常にクライアントを作成し、それを開くことができるようだが、メソッドのいずれかを呼び出すことはできません。WCF NetNamedPipeBinding TimeoutException(Windows Server 2008)

サービスの初期化コード:

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を除いたサービスメソッドを呼び出すことはできません。

+0

申し訳ありませんが、私のアプリはANYバインディングタイプでは動作しません。代わりに、netTcpBindingをテストするには、新規のプロジェクトを作成し、Add(int n1、int n2)メソッドを持つ新しいサービスを試してみました。私はinstallutil.exeを使用してターゲット2008サーバーにサービスを手動でインストールしました。クライアントにはサービス参照の更新を行い、問題なくプログラムを実行しました。私は同じ構成を元のサービスにコピーしようとしましたが、動作したくないのですが、それでも動作しません... * rips hair out *! – templar112

答えて

0

さまざまなバインディングを試して、基本に戻ると、サンプルプログラムが動作していることに気付きましたが、デバッグにVisual Studioを使用していない限りは動作しませんでした。私はその時点で自分のコードで何かが起こっているに違いないと決めました。デバッグを簡単にするために、私はバインディング内のすべてのセキュリティをオフにしました。

何が起こっているのかを判断するために、私のサービスのOnStartメソッドのステートメントのほとんどをコメントアウトし始めました。私はServiceHostを初期化するコードを除いてすべてをコメントアウトしました。驚いたことに、私のクライアントは今サービスと正常に通信できました。私はクライアントが突然私にTimeoutExceptionを与え始めるまで、OnStartメソッドで各行のコメントを外し始めました。

サービスクラス「MyAPI」は、契約「IMyAPI」を実装しています。 "MyAPI"クラスをWCFサービスとして使用するだけでなく、私はMyAPIクラスのインスタンスをサービス内で内部的に使用してさまざまなことを行いました(内部メソッド)。私が最初に「MyAPI」クラスのインスタンスを作成し、その後のServiceHostを作成し、私のOnStartメソッドで:すべてがうまくですが、本当に私ができなかった登場して

MyAPI API = new MyAPI(); 

ServiceHost service = new ServiceHost(typeof(MyAPI)); 

私は、エラーまたは例外を取得していませんでしたクライアントを使用してサービスに接続します。できるだけ早く私は、上記の文の順序を変更して、クライアントが再び働き始めました:

ServiceHost service = new ServiceHost(typeof(MyAPI)); 

MyAPI API = new MyAPI(); 

私はこれが発生しているなぜわからないんだけど、私が知っているすべては私が内部的に私のAPIを使用してサービスとしてできることですクライアント接続の問題はありません。おそらく、そこの誰かが、これの背後にある理由でいくつかの光を提供するか、あるいは私のコードが適切に設計されていないかもしれません。

関連する問題