フォールトを返さなければならない WCF サービスがあります。何らかの理由で、サービスへの呼び出しが次のエラーでタイムアウトし始めます。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。」
問題を調査した結果、あるパターンが明らかになりました。サービスが 10 回障害を返すと、タイムアウトが発生します。そこで、次のように実装されたテストサービスを作成しました。
public string GetData(int value)
{
throw new FaultException("A testerror occured");
}
そしてテストクライアント:
protected void RunTestGetData()
{
using (TestServiceReference.Service1Client client
= new WSPerformanceTester.TestServiceReference.Service1Client())
{
try
{
client.GetData(1);
client.Close();
outputWriter.WriteLine(string.Format("Call run in thread {0}: GetData()", Thread.CurrentThread.ManagedThreadId));
outputWriter.Flush();
}
catch (Exception e)
{
client.Abort();
client.Close();
outputWriter.WriteLine(string.Format("Error occured in thread {0}: GetData(): {1}", Thread.CurrentThread.ManagedThreadId, e.Message));
outputWriter.Flush();
}
}
}
これは、サービスが FaultException を返す場合にのみ発生します。通常の例外をスローすると、サービスは 10 回目の呼び出し後も実行を継続できます。明らかに、例外を適切にラップしたいので、通常の例外をスローするだけでは現実的な選択肢ではありません。
これらのタイムアウト例外が発生するのはなぜですか? 助けてくれてありがとう..