У меня есть служба WCF, которая иногда должна возвращать ошибку. По какой-то причине звонки в мой сервис начинают зависать со следующей ошибкой:
«Канал запроса истек во время ожидания ответа после 00: 00: 59.8906201. Увеличьте значение тайм-аута, переданное на вызов Request, или увеличьте значение SendTimeout в Binding. Время, выделенное для этой операции, могло быть более длительный тайм-аут. "
После изучения проблемы возникла закономерность: когда служба 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-го вызова. Очевидно, что я хотел бы красиво обернуть свои исключения, так что просто бросить нормальные исключения - не реальный вариант.
Почему я испытываю эти исключения тайм-аута? Заранее спасибо за любую помощь ..