Usługa WCF, jak zwiększyć limit czasu?
Może wydawać się głupie pytanie, ale wszystko w WCF wydaje się dużo bardziej skomplikowane niż w asmx, Jak mogę zwiększyć timeout usługi svc?
Oto co mam do tej pory:
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout"
openTimeout="12:00:00"
receiveTimeout="12:00:00" closeTimeout="12:00:00"
sendTimeout="12:00:00">
</binding>
</basicHttpBinding>
</bindings>
A potem mój punkt końcowy jest mapowany tak:
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="IncreasedTimeout"
contract="ServiceLibrary.IDownloads">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Dokładny błąd jaki otrzymuję:
Kanał żądań został przerwany podczas oczekiwania na odpowiedź po 00:00:59.9990000. Zwiększ wartość timeout przekazaną do wywołania żądania lub zwiększ wartość SendTimeout na Wiązanie. Czas przeznaczony na tę operację mógł być częścią dłuższego limitu czasu.
W kliencie testowym WCF znajduje się ikona konfiguracji, która zawiera konfigurację czasu uruchomienia mojej Usługi:
Jak widzisz, to nie te same wartości, które dla niego ustawiłem? Co robię źle?
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDownloads" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="">
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
4 answers
W konfiguracji wiązania są cztery wartości timeoutu, które możesz dostosować:
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout"
sendTimeout="00:25:00">
</binding>
</basicHttpBinding>
Najważniejszy jest sendTimeout
, który mówi, jak długo klient będzie czekał na odpowiedź z usługi WCF. Możesz określić hours:minutes:seconds
w swoich ustawieniach - w mojej próbce ustawiam timeout na 25 minut.
openTimeout
Jak sama nazwa wskazuje, jest to czas, który chcesz poczekać, gdy otworzysz połączenie z usługą WCF. Podobnie, closeTimeout
to czas, w którym zamykasz połączenie (pozbądź się klienta proxy), na które będziesz czekać przed wyrzuceniem wyjątku.
receiveTimeout
jest trochę jak lustro dla sendTimeout
- podczas gdy limit czasu wysyłania to czas oczekiwania na odpowiedź od serwera, receiveTimeout
to czas, jaki dasz klientowi na otrzymanie i przetworzenie odpowiedzi od serwera.
Jeśli wysyłasz tam i z powrotem "normalne" wiadomości, obie mogą być dość krótkie - szczególnie receiveTimeout
, ponieważ otrzymanie wiadomości SOAP, odszyfrowywanie, sprawdzanie i deserializacja nie powinno zająć prawie żadnego czasu. Historia jest inna w przypadku streamingu - w takim przypadku możesz potrzebować więcej czasu na klienta, aby faktycznie zakończyć" pobieranie " strumienia otrzymanego z serwera.
Aby na poważnie opanować wszystkie zawiłości WCF, zdecydowanie polecam Kup książkę" Nauka WCF " autorstwa Michele Leroux Bustamante:
A także spędzasz trochę czasu oglądając jej 15-częściową serię screencastów" WCF od góry do dołu " - Gorąco polecam!
Dla bardziej zaawansowanych tematów polecam zajrzeć do serwisów Juwala Lowy ' ego Programowanie WCF książka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 15:20:52
Konfiguracja timeout musi być ustawiona na poziomie klienta, więc konfigurację, którą ustawiałem w sieci.konfiguracja nie miała żadnego wpływu, narzędzie testowe WCF ma własną konfigurację i tam trzeba ustawić timeout.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-05 15:42:37
Najlepszym sposobem jest zmiana dowolnych ustawień w kodzie.
Zobacz poniższy przykład:
using(WCFServiceClient client = new WCFServiceClient ())
{
client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 1, 30);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 07:27:25
Ostatnio pojawił się ten sam błąd, ale był w stanie go naprawić, zapewniając zamknięcie każdego połączenia klienta wcf. np.
WCFServiceClient client = new WCFServiceClient ();
//More codes here
// Always close the client.
client.Close();
Lub
using(WCFServiceClient client = new WCFServiceClient ())
{
//More codes here
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 10:09:39