Könnte wie eine dumme Frage erscheinen, aber alles in WCF scheint viel komplizierter als in asmx. Wie kann ich das Timeout eines SVC-Dienstes erhöhen?
Folgendes habe ich bisher:
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout"
openTimeout="12:00:00"
receiveTimeout="12:00:00" closeTimeout="12:00:00"
sendTimeout="12:00:00">
</binding>
</basicHttpBinding>
</bindings>
Und dann wird mein Endpunkt folgendermaßen zugeordnet:
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="IncreasedTimeout"
contract="ServiceLibrary.IDownloads">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Der genaue Fehler, den ich bekomme:
Der Anforderungskanal ist abgelaufen, während auf eine Antwort nach 00: 00: 59.9990000 gewartet wurde. Erhöhen Sie den Timeout-Wert, der an den Aufruf von Request übergeben wird, oder erhöhen Sie den SendTimeout-Wert in der Bindung. Die diesem Vorgang zugewiesene Zeit war möglicherweise Teil eines längeren Zeitlimits.
Im WCF-Testclient gibt es ein Konfigurationssymbol, das die Laufzeitkonfiguration meines Dienstes enthält:
Wie Sie sehen, sind es nicht die gleichen Werte, die ich dafür festgelegt habe? Was mache ich falsch?
<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>
Am besten ändern Sie die gewünschten Einstellungen in Ihrem Code.
Schauen Sie sich das folgende Beispiel an:
quelle
Die Timeout-Konfiguration muss auf Client-Ebene festgelegt werden, sodass die Konfiguration, die ich in der web.config festgelegt habe, keine Auswirkungen hatte. Das WCF-Testtool verfügt über eine eigene Konfiguration und dort müssen Sie das Timeout festlegen.
quelle
Ich habe kürzlich den gleichen Fehler erhalten, konnte ihn jedoch beheben, indem sichergestellt wurde, dass jeder wcf-Client-Aufruf geschlossen wurde. z.B.
oder
quelle
using
ohne ein fehlerhaftes Kanalobjekt zu entsorgen. Hier ist ein weiterer Blogger mit einem Ansatz, der besser mitusing
Blöcken kompatibel ist : erwyn.bloggingabout.net/2006/12/09/WCF-Service-Proxy-Helper .