魔法の 10 プロキシのインスタンス化の後にハングする二重 WCF サービスがあります。クライアントの特定のエラーは次のとおりです。
「System.TimeoutException: この要求操作は net.tcp://localhost:8080/RoomService/netTcp に送信され、構成されたタイムアウト (00:00:59.9960000) 内に応答を受け取りませんでした」。
サーバーに明らかなエラー メッセージはありません。
次のインスタンスを開く前に、プロキシ接続のすべてのインスタンスを適切に閉じているため、これは標準的な明らかな問題、つまりプロキシ接続を閉じることができないことに注意してください。
try
{
client.Close();
}
catch (CommunicationException)
{
client.Abort();
}
catch (TimeoutException)
{
client.Abort();
}
catch (Exception)
{
client.Abort();
throw;
}
そして、スロットリング動作をすべて同時に 500 に設定しました。
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
MaxConcurrentCalls = 500,
MaxConcurrentSessions = 500,
MaxConcurrentInstances = 500
};
サービスの ConcurrencyMode を Multiple に設定し、InstanceContextMode の 3 つの可能な値すべてを試しました。
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
サービスを自己ホストし、IIS 内でホストしようとしましたが、それぞれで同じ結果が得られました。
NetTcpBinding、WSDualHttpBinding、および PollingDuplexBinding (Silverlight 上) を試しましたが、それぞれで同じ結果が得られました。これは双方向サービスであるため、BasicHttpBinding または WSHttpBinding を試すことができません。
私のコードには、(複数のコールバックを同時に実行するために) 複数のスレッドを起動している場所が 1 箇所ありましたが、トラブルシューティングの目的でその部分を少しコメントアウトしましたが、違いはありませんでした。
クライアントでは、テストごとに新しいプロキシを使用し、すべてのテストで同じプロキシを再利用しようとしましたが、うまくいきませんでした。プロキシごとに新しい InstanceContext を作成し、すべてのプロキシで同じ InstanceContext を再利用しようとしましたが、うまくいきませんでした。
何をしても、テスト ハーネスで 10 回目のテストを実行した後、サービスへの次の呼び出しがハングします。
私が間違っているかもしれないことについて何か考えはありますか?