2010-05-20 4 views
10

Mein Service funktioniert gut unter geringer Last. Aber unter hoher Last bekomme ich Verbindungsfehler.WCF listenBacklog und maxConnections können nicht höher als 10 gesetzt werden. Warum nicht?

Ich weiß über andere Einstellungen, aber ich versuche, den Parameter listenBacklog insbesondere für meine TCP gepufferte Bindung zu ändern.

Wenn ich listenBacklog = "10" einstelle, kann ich in den Port telnet, wo mein WCF-Dienst läuft.

Wenn ich listenBacklog auf etwas höher als 10 ändern, wird es mich nicht telnet in meinem Dienst, wenn es ausgeführt wird.

Keine Fehler scheinen geworfen zu werden.

Was kann ich tun?
Ich bekomme das gleiche Problem, wenn ich meine maxConnections weg von 10 ändere. Alle anderen Eigenschaften der Bindung kann ich höher ohne ein Problem einstellen.

Hier ist, was meine Bindung aussieht:

<bindings> 
    <netTcpBinding> 
<binding name="NetTcpBinding_IMyService" closeTimeout="00:01:00" 
    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" 
    hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" 
    maxBufferSize="1048576" maxConnections="10" maxReceivedMessageSize="1048576"> 
    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
    maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
    enabled="false" /> 
    <security mode="Transport"> 
    <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"> 
    </transport> 
    <message clientCredentialType="Windows" /> 
    </security> 
</binding> 
... 

ich die Werte von maxConnections und ListenBacklog wirklich erhöhen müssen

+0

Tolle erste Frage. Mach weiter. ... Ich sehe, dass Ihr clientCredentialType auf Windows eingestellt ist. Ich bin mir nicht sicher, ob es eine Verbindung gibt, aber es stellt sich die Frage: Ist es möglich, dass Sie maximal 10 Verbindungslimits für die physischen Ordner haben, die Ihre Anwendung hosten? Überprüfen Sie das. Dies könnte eher ein Problem auf Plattformebene als ein logisches WCF-Problem sein. –

+4

Auf welcher Maschine und welchem ​​Betriebssystem laufen Sie? Ich erinnere mich vage daran, dass bestimmte Windows-Versionen mit einer maximalen Begrenzung von 10 Clients direkt in Windows integriert sind - vielleicht ist das Ihr Problem hier: Windows ermöglicht Ihnen 10 Anrufer und schließt dann die Türen ... wenn Sie dies auf XP oder etwas ausführen: versuchen Sie es auf einer Windows Server-Version –

Antwort

0

Diese Sicherheit grenzender Wahrscheinlichkeit eine Drosselung Problem. Versuchen Sie, nicht standardmäßige Werte für die Diensteinschränkungsverhaltenswerte anzugeben. See this page for some guidance.

6

Wenn Sie auf einem Win2000, XP, Vista oder Win7 Rechner arbeiten, beschränkt das Betriebssystem Sie auf 10 gleichzeitige TCP Verbindungen. Versuchen Sie auf einem Windows Server-Computer zu bestätigen.

+0

Gibt es eine Möglichkeit, den Betriebssystemwert zu ändern? Ich habe das gleiche Problem unter Win7 und Windows Server 2008 R2 Standard. Vielen Dank. – kzfabi

+1

Dies scheint nicht wahr zu sein. Ich bekomme auch die gleichen Ergebnisse in Windows Server 2008 R2. – bugfixr

+0

[rant] Wie kann ich meine Anwendung vergleichen, um sicherzustellen, dass sie unter Last gut funktioniert, wenn irgendein Idiot willkürlich entscheidet, dass ich nur 10 TCP-Verbindungen haben kann? Ich habe stundenlang mit MaxConcurrentXXX herumgespuckt, um endlich festzustellen, dass es eine Betriebssystembeschränkung ist. Eine ewige Pocken auf die Menschen, die diese hirntote Einschränkung auferlegt. @MS Niemand mit einem halben Gehirn wird deine Lizenzen betrügen, indem er einen öffentlichen Netflix-Server auf Windows 7 Home Edition ausführt. Dass es Grenzen gibt, gut, aber vernünftig, bitte [/ rant] – smirkingman

-2

Versuchen Sie, alle Verweise auf HTTP-Bindungen und MEX zu entfernen.

Verwandte Themen