30 Stimmen

Fehler "Dienst zu beschäftigt" in WCF

Ich erhalte gelegentlich die folgende Ausnahme in meinem .Net WCF Service. "Der HTTP-Dienst mit der Adresse http://MyServer/TestWCF/MyService.svc ist zu beschäftigt."

Übersehe ich hier etwas?

Ich verwende eine einfache http-Bindung und habe die WCF-Drosselung aktiviert.

<basicHttpBinding>
        <binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647"
                 messageEncoding="Text" textEncoding="utf-16" sendTimeout="00:01:00" >
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="163840000"
                        maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" />
        </binding>

. . . .

<behavior name="MyWCFServices.MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling
                    maxConcurrentCalls="16"
                    maxConcurrentInstances="2147483647"
                    maxConcurrentSessions="10"/>
        </behavior>

Kann die Drosselung zur Lösung des Problems beitragen? Kann ich auch die empfohlenen Parameterwerte für die Drosselung bei einer stark frequentierten Website erfahren?

10voto

marc_s Punkte 701497

Sie könnten auf jeden Fall versuchen, die maxConcurrentSessions y maxConcurrentCalls in Ihrem Dienst Drosselverhalten auf die Standardwerte von 30 oder so und sehen Sie, ob der Fehler dadurch verschwindet. Server zu beschäftigt würde darauf hindeuten, dass mehr Anfragen eingegangen sind, als Ihr Dienstdrosselungsverhalten zulässt, und dass sie verworfen wurden, da keine Dienstinstanz verfügbar war, um sie innerhalb der vorgegebenen Zeitspanne zu bedienen.

9voto

Adam C. Punkte 91

Meine Antwort wäre: Prüfen Sie, ob der App-Pool in Betrieb ist und gut funktioniert.

Ich habe gesehen, dass dieser Fehler auftritt, wenn der App-Pool aufgrund von Ausnahmen, die nicht abgefangen werden, gestorben ist.

Denken Sie zum Beispiel an benutzerdefinierte Konfigurationsabschnitte - ein Fehler darin führt dazu, dass Ihre Anwendung fehlschlägt, bevor sie überhaupt gestartet wurde. Zu viele davon in einem kurzen Zeitraum werden den App-Pool zerstören.

4voto

Mark Bergan Punkte 83

Wenn Ihr Dienst unter Ihrem Konto (Identität) ausgeführt wird, ist es gut möglich, dass Sie Ihr Kennwort kürzlich geändert haben. Sie müssen es für den IIS-Anwendungspool im Dialogfeld Erweiterte Einstellungen | Identität zurücksetzen.

2voto

Shiraz Bhaiji Punkte 62129

Es geht nicht nur um die maxConcurrentSessions, sondern auch darum, wie lange die Sitzung dauert.

Wenn der Client die Verbindung nicht schließt, bleibt sie bis zur Zeitüberschreitung offen. Sie könnten dann die maxConcurrentSessions-Grenze mit sehr wenig Aktivität auf dem Server erreichen.

2voto

ALEXintlsos Punkte 1781

Stellen Sie sicher, dass Sie auch die innere Ausnahme überprüfen; während unserer Implementierungen deaktivieren wir den Anwendungspool eines WCF-Webdienstes, und die Clients erhalten diesen Fehler während dieser Zeit:

System.ServiceModel.ServerTooBusyException: Der HTTP-Dienst unter der Adresse https://ourserver.x.com/path/service.svc ist zu beschäftigt. ---> System.Net.WebException: Der Remote-Server hat einen Fehler zurückgegeben: (503) Server nicht verfügbar.

In diesem Fall wird also ein HTTP-Fehler 503 als "Server zu beschäftigt" (falsch?) interpretiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X