Die WCF -Antwortmeldung dauert 40 Minuten und es wird keine Ausnahme aus dem Zeitüberschreiten ausgelöst

StackOverflow https://stackoverflow.com/questions/1207770

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe einen WCF -Dienst, der in IIS7 gehostet wird (die Dienst- und Client -Konfiguration befindet sich am Ende dieses Beitrags). Ich bin auf ein seltsames Szenario gestoßen, von dem ich gehofft hatte, dass jemand einige Ideen dazu hat, wie man es angreift und eine Lösung findet.

Der Service enthält nur einen Vertrag, "ProcessMessage". Ich kann synchrone Nachrichten aus dem Dienst anhand dieses Vertrags mit der erwarteten Leistung senden/empfangen, aber ein bestimmter Anruf bei diesem Vertrag gibt mehr als 65 KB Daten zurück. ca. 1 MB. Als ich es ursprünglich bezeichnete, erhielt ich die erwartete MAX -Empfangsgröße über den Fehler. Deshalb habe ich die MaxReced -MessageSize erhöht, und jetzt dauert dieser spezielle Anruf 40 Minuten, um zum Kunden zurückzukehren. Dies geht weit über einen der Zeitüberschreitungseinstellungen hinaus und weit über das hinaus, was ich erwarten würde. Die Server -Seitenverarbeitungszeit beträgt nur 2 Sekunden. Es scheint auf Kundenseite gehalten zu werden.

Ich habe auch versucht, einige der anderen Quoten in der Datei ohne Erfolg zu erhöhen.

Alle Gedanken wären sehr geschätzt. Vielen Dank.

Servicekonfiguration:

  <system.serviceModel>
<services>
  <service behaviorConfiguration="Lrs.Esf.Facade.Startup.FacadeBehavior"
    name="Lrs.Esf.Facade.Startup.FacadeService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="default" contract="Lrs.Esf.Facade.Startup.IFacadeService">
      <identity>
        <servicePrincipalName value="lrsdomain/PensionDev" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="default">
      <security mode="None"/>
    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="Lrs.Esf.Facade.Startup.FacadeBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true" />
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />

    </behavior>
  </serviceBehaviors>
</behaviors>

Client -Konfiguration:

  <system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_IFacadeService" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:1:00" sendTimeout="00:01:00"
        bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
        maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600"
        messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
        allowCookies="false">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
          maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="None">          
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<client>
  <endpoint address="http://esf2.facade.testpe.pg.local/FacadeWcf/FacadeService.svc"
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IFacadeService"
      contract="FacadeServiceReference.IFacadeService" name="WSHttpBinding_IFacadeService">
    <identity>
      <servicePrincipalName value="lrsdomain/PensionDev" />
    </identity>
  </endpoint>
</client>

War es hilfreich?

Lösung 2

Ich habe die Grundursache für das Problem und eine Arbeit herausgefunden, aber zusätzliche Erkenntnisse wären großartig.

Der Datensatz wurde im XML -Format von WCF serialisiert. Ich zwang den Datensatz, als Byte [] zu serialisieren [] und die Zeit auf 4 Sekunden. Eine Vermutung ist, dass das Entkommen von allen Zeichen in 4 MB XML, sodass die HTTP -Kommunikation gültig war, das Problem verursacht hat.

Andere Tipps

Sie haben die Größe der verschiedenen Parameter auf der Serverseite nicht erhöht, so scheint man das auf jeden Fall zu versuchen! Verwenden Sie die Bindungskonfiguration von Ihrer Client -Konfigurationsdatei auch auf der Serverseite - der Dienst könnte durchaus ersticken, da er immer noch auf 64.000 Nachrichtengröße versetzt ist.

Auch die receiveTimeout In Ihrem Kundenbindung ist ein bisschen lustig - es fehlt eine Null -Ziffer:

<binding name="WSHttpBinding_IFacadeService" 
receiveTimeout="00:1:00" 

Du solltest benutzen receiveTimeout="00:01:00"

Marc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top