Erhöhung der timeout für WCF-web service in c#

Ich habe derzeit eine Anwendung, die ruft einen web service auf einem server für die Suche. Wir können erwarten, eine große Menge von Daten zurückgegeben werden, so eine Suche länger dauern als eine minute, ist es routine.

Haben wir erhalten die folgenden Fehlermeldung für so große Volumen suchen:

Den request-Kanal Zeitüberschreitung beim warten auf eine Antwort nach 00:00:59.7350618. Erhöhen Sie den timeout-Wert übergeben, um den Anruf zu Verlangen oder erhöhen Sie den SendTimeout-Wert auf der Bindung. Die Zeitdauer für diesen Vorgang kann ein Teil eines längeren Timeouts.

Dies ist etwas, das wir gesehen haben, gebeten, in mehreren Fragen auch schon gepostet auf StackOverflow, leider ist keine der angebotenen Lösungen haben mir geholfen, das Problem zu beheben oder sogar in der Lage, konfigurieren Sie die time-out-Fenster.

Wir haben uns beide geändert, die app.config für den client, erhöht alle timeouts da involviert (CloseTimeout, "OpenTimeout" ReceiveTimeout, und SendTimeout) und alle web.config-Werte für den Dienst auf dem server (closeTimeout, "opentimeout" und SendTimeout).

Keine dieser änderungen hatte keine Wirkung, ich bekomme noch immer die minute timeout. Keine Ahnung warum die änderungen an diesen Werten hätte das keine Auswirkungen?

In den Beispielen unten senkten wir die Zeit um uns aus zu warten, bis die volle minute während der Prüfung.

Web.config:

<configuration>
  <system.web>
    <compilation targetFramework="4.0" />
  </system.web>
  <system.diagnostics>
    <trace autoflush="true" />
    <sources>
      <source name="System.Net">
        <listeners>
          <add name="TraceFile" />
        </listeners>
      </source>
      <source name="System.Net.Sockets">
        <listeners>
          <add name="TraceFile" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener"
           initializeData="trace.log" />
    </sharedListeners>
    <switches>
      <add name="System.Net" value="Verbose" />
      <add name="System.Net.Sockets" value="Verbose" />
    </switches>
  </system.diagnostics>
  <system.serviceModel>
    <diagnostics>
      <messageLogging logMalformedMessages="false" logMessagesAtServiceLevel="false"
                      logMessagesAtTransportLevel="false" />
    </diagnostics>
    <services>
      <service behaviorConfiguration="SearchIndexServiceBehavior" name="SearchIndex.Service">
        <endpoint address="" binding="basicHttpBinding" contract="ISearchIndexServices" />
        <host>
          <timeouts closeTimeout="00:00:10" />
        </host>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding closeTimeout="00:00:10" openTimeout="00:00:15" sendTimeout="00:00:20"
                 receiveTimeout="00:00:25" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SearchIndexServiceBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.transactions>
    <defaultSettings timeout="00:05:00" />
  </system.transactions>
</configuration>

app.config

<configuration>
  <configSections>
  </configSections>
  <startup>
  </startup>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_ISearchIndexServices" closeTimeout="00:00:10" openTimeout="00:00:15" receiveTimeout="00:10:00" sendTimeout="00:00:20" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="5242880" maxBufferPoolSize="524288" maxReceivedMessageSize="5242880" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
          <readerQuotas maxDepth="32" maxStringContentLength="5242880"maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://MyServer/SearchIndexService/SearchIndexServices.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISearchIndexServices" contract="WFC.ISearchIndexServices" name="BasicHttpBinding_ISearchIndexServices" />
    </client>
  </system.serviceModel>
</configuration>
  • Wie verbinden Sie sich mit den WCF service? Verwenden Sie einen client generiert(Add Service Reference), ChannelFactory<T>, oder die Umsetzung von ClientBase<T>?
  • Die Beschreibung des Problems hier kann durch den Indikator, dass Ihre maxReceivedMessageSize ist vielleicht zu klein. Obwohl dann die Fehlermeldung wäre ziemlich seltsam. Aber ich kann mich erinnern, hatte das Problem auch vor einiger Zeit.
  • Ich habe gerade einen Service Verweis auf MyServer
InformationsquelleAutor user1183014 | 2012-02-01
Schreibe einen Kommentar