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?

1voto

krisragh MSFT Punkte 1908

Die einzige Quelle für diese Ausnahme, die mir bekannt ist, ist, wenn Sie Sitzungen verwenden und die MaxPendingChannels-Drossel erreichen. Der Standardwert ist ziemlich niedrig, etwa 4. Sie könnten versuchen, es höher zu setzen (128 zum Beispiel), oder wenn Sie nur Repro wollen, setzen Sie es auf 1 und Sie sollten es unter Lasttests sehen.

Hier finden Sie weitere Informationen zu den Sitzungen: http://msdn.microsoft.com/en-us/library/ms733795.aspx

1voto

Arturo Hernandez Punkte 2439

Ich bin gerade auf diesen Fehler gestoßen, und er lässt sich auf ein einfaches Konfigurationsproblem zurückführen. Ich hatte einen Dienst auf genau demselben Port und derselben Schnittstelle eingerichtet (Mock-Service). Ich führte den Dienst mit dem entsprechenden Befehlszeilenschalter aus, um den "ursprünglichen" Dienst auszuführen, den ich beabsichtigte. Der Fehler war verschwunden.

1voto

Arun Kumar T Punkte 620

Meine Lösung wäre, überprüfen Sie die App.Config-Datei, ob der Dienst-Tag ist es für diesen bestimmten Dienst.

z. B:

<service name="MyServices.ServiceName">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TestBinding"   contract="MyServices.ServiceName">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/MyServices/ServiceName/" />
          </baseAddresses>
        </host>
</service>

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