Mam usługę WCF, która czasami musi zwrócić błąd. Z jakiegoś powodu połączenia z moją usługą kończą się z powodu następującego błędu: "Kanał żądania przekroczył limit czasu oczekiwania na odpowiedź po 00: 00: 59.8906201. Zwiększ wartość limitu czasu przekazanego do połączenia z żądaniem lub zwiększ wartość Wartość SendTimeout na powiązaniu Czas przydzielony na tę operację mógł być częścią dłuższego limitu czasu. "Dlaczego moja usługa WCF zwraca wyjątek FaultException, limit czasu po 10 wywołaniach?
Po przeanalizowaniu problemu pojawił się wzorzec: po 10-krotnym zwrocie usługi nastąpiło przekroczenie limitu czasu. Więc stworzyłem testservice realizowany przez:
public string GetData(int value)
{
throw new FaultException("A testerror occured");
}
a testclient:
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();
}
}
}
tylko to się stanie, gdy usługa jest zwrócenie FaultException. Jeśli wyrzucę normalny wyjątek, usługa będzie mogła kontynuować działanie po 10. rozmowie. Oczywiście, chciałbym ładnie opakować moje wyjątki, więc zwyczajne rzucanie normalnych wyjątków nie jest realną opcją.
Dlaczego występują wyjątki timeout? Z góry dziękuję za pomoc.
[potrzebne źródło] – piers7