Wir haben ein Problem, bei dem während des Lasttests, wenn wir Anrufe schnell auf einen unserer Dienste abfeuern, der folgende Fehler auftritt
System.ServiceModel.ServerTooBusyException": Die Anforderung, eine zuverlässige Sitzung zu erstellen, wurde von der RM Destination abgelehnt. Der Server 'net.tcp://localhost:10511/ParameterMonitorService' ist zu beschäftigt, um diese Anfrage zu verarbeiten. Versuchen Sie es später noch einmal. Der Kanal konnte nicht geöffnet werden."
Wir haben den Wert von maxPendingChannels von seinem Standardwert 4 auf 128 und darüber hinaus erhöht, und der Fehler ist verschwunden. Jetzt jedoch hält der Dienst die Verarbeitung von Nachrichten unter Last einfach an, anstatt die Ausnahme auszulösen, und beginnt dann einige Minuten später erneut.
Er scheint nichts fallen zu lassen, er bleibt nur eine Weile hängen. Je mehr wir auf den Dienst einhämmern, desto länger scheint diese Wiederherstellung zu dauern.
Der Dienst ist als Per-Call mit ConcurrencyMode Multiple konfiguriert. Andere Verhaltenseinstellungen sind:
<serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100" maxConcurrentInstances="100"/>
<customBinding>
<binding name="Services_Custom_Binding" openTimeout="00:00:20" sendTimeout="00:01:00">
<reliableSession ordered="true" inactivityTimeout="00:10:00" maxPendingChannels="128" flowControlEnabled="true" />
<binaryMessageEncoding>
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binaryMessageEncoding>
<tcpTransport maxPendingConnections="100" listenBacklog="100" />
</binding>
</customBinding>
Wir sitzen irgendwie fest. Jede Hilfe ist willkommen!