Der HTTP-Transportkanal in WCF verwendet standardmäßig persistente HTTP-Verbindungen. Wie kontrolliere ich das Timeout für diese Verbindungen? Der Standardwert ist 100s. Ich habe diesen Wert durch Überwachung der Anwendung in Procmon gefunden. Ich habe keine Einstellung in HTTP-Transport-Bindungselement gefunden, das dieses Timeout konfiguriert. Gibt es eine .NET-Klasse, die dieses Zeitlimit steuern kann?Festlegen des Keep Alive-Intervalls für HTTP-Verbindung in WCF
Antwort
Werfen Sie einen Blick hier:
Es gibt eine ausführliche Diskussion über die Manipulation der lebendig Eigenschaft während einer HTTP-Verbindung ist zu halten.
Von this answer, und was ich here lesen kann, sieht es aus wie Sie eine benutzerdefinierte HTTP-Bindung, erstellen möchten, und stellen Sie die inactivityTimeout
Attribut.
Aus dem MSDN-Artikel:
<bindings> <customBinding> <binding name="Binding1"> <reliableSession acknowledgementInterval="00:00:00.2000000" enableFlowControl="true" maxTransferWindowSize="32" inactivityTimeout="00:10:00" maxPendingChannels="128" maxRetryCount="8" ordered="true" /> <security mode="None"/> <httpTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" proxyAuthenticationScheme="Anonymous" realm="" useDefaultWebProxy="true" /> </binding> </customBinding> </bindings>
Nein. Ich möchte HTTP am Leben lassen nicht zuverlässig Sitzung aufrecht erhalten. HTTP keep alive ist in der HTTP-Protokollspezifikation beschrieben. –
Scheint, dass HTTP-Verbindungen immer persistent sein sollten, gemäß RFC 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.1). – louisgab
Ich glaube nicht. Der RFC besagt, dass die HTTP-Implementierung HTTP-persistente Verbindungen implementieren sollte. Nicht, dass nur persistente Verbindung verwendet werden sollte. –
Wie wäre das? Scheint es eine Funktion Ihres IIS-Servers und nichts mit dem WCF-Dienst zu tun? Ich weiß, dass dieser Link für IIS6 gilt, aber vielleicht dient er als Grundlage für etwas Ähnliches in IIS7? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true
Ich habe bereits versucht, Verbindungstimeout auf IIS einzurichten, und es hat nicht funktioniert. Es hat nichts damit zu tun, die Einstellung beizubehalten. Jedenfalls werde ich es in den nächsten Tagen noch einmal versuchen. Wenn es funktioniert, werde ich das neue Kopfgeld setzen und dich auszeichnen. –
Es klingt für mich, als ob Sie den HTTP-Header Keep-Alive
anpassen möchten. Sie sollten this article auf HTTP keep-alive lesen und zuerst feststellen, ob dies wirklich etwas wert ist.
Wenn dies der Fall ist, erstellen Sie eine Message Inspector. Dies sollte Ihnen ermöglichen, die HTTP-Header für jede Nachricht, die gesendet wird, zu ändern:
public class KeepAliveMessageInspector : IClientMessageInspector
{
// ...
public object BeforeSendRequest(
ref System.ServiceModel.Channels.Message request,
System.ServiceModel.IClientChannel channel)
{
// Add/modify the Keep-Alive header
var httpRequestMessage = new HttpRequestMessageProperty();
httpRequestMessage.Headers.Add("Keep-Alive", "9000");
request.Properties.Add(
HttpRequestMessageProperty.Name, httpRequestMessage);
return null;
}
// ...
}
Diese Idee ist interessant. Ich habe so etwas in Verbindung mit Cassini gesehen, aber ich denke, es ist kein Standard-Header. Jedenfalls werde ich es in den nächsten Tagen versuchen. Wenn es funktioniert, werde ich das neue Kopfgeld setzen und dich auszeichnen. –
BTW. Ich brauche es nicht zu benutzen. Ich möchte nur wissen, ob es möglich ist, es irgendwie zu ändern und wo der Standardwert 100s herkommt. –
@Ladislav Mrnka: Entschuldigen Sie diesen alten Post, aber Sie konnten diesen HTTP Keep-Alive-Wert setzen oder lesen.Wenn ja, wäre ich sehr daran interessiert, mehr darüber zu erfahren. Danke –
Ich fand die Lösung dafür. Das Problem ist, dass der zugrunde liegende Kernel http.sys eine eigene Zeitüberschreitung hat und die Verbindung unterbrochen wird.
http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/
netsh http add timeout timeouttype=idleconnectiontimeout value=120
Auch diese Frage ist ähnlich wie dieser What 130 second timeout is killig my WCF streaming service call?
- 1. TCP Keep Alive-Verbindung gehostet in WCF
- 2. Wie Festlegen des Standard-RequestFormat für einen WCF-Dienstkontrakt?
- 3. Anmeldeinformationen für eine WCF-Anwendung festlegen?
- 4. Festlegen des Anfangsverzeichnisses für NSOpenPanel
- 5. Festlegen des aufklappbaren Ordners für verschiedene Auflösungen
- 6. Festlegen des Zeitraums Datumsfilter für Tableau
- 7. Festlegen des Standardeigenschaftswerts in graph_tool
- 8. Festlegen des 24-Stunden-Zeitformats für TimePicker
- 9. Festlegen des Prinzipal-/Benutzerkontexts für ein Benutzerobjekt
- 10. Festlegen des Befehlsziels in XAML
- 11. iPhone - Festlegen des Hintergrunds für UITableViewController
- 12. Django-Formular: Festlegen des Anfangswerts für DateField
- 13. Festlegen von IncludeExceptionDetailInFaults auf true im Code für WCF
- 14. Festlegen der Priorität für Anwendungspools in IIS
- 15. Festlegen des Ausweiswerts für ein UITabBar-Objekt in AppDelegate
- 16. Festlegen des Klassenpfads für eine gespeicherte Java-Prozedur in Oracle
- 17. Festlegen des Standardstils für einen Typ in Code-Behind
- 18. Festlegen des Fensterstils in PyQT/PySide?
- 19. Einstellung receiveTimeout für Rückrufe in WCF?
- 20. Keep div Höhe relevant für das Seitenverhältnis
- 21. Festlegen des ExtendedMetadata-Felds "signingAlgorithm"
- 22. Festlegen des Namensattributs des Symfony 2-Formularfelds
- 23. Festlegen des Spaltenhintergrunds in WPF ListView/Gridview
- 24. Fehler "Objekt ist schreibgeschützt" beim Festlegen von ClientCredentials in WCF
- 25. HTTP-Keep-Alive-Zeitüberschreitung
- 26. Festlegen der Startposition des Ordnerbrowserdialogs
- 27. Sichtbarkeit des übergeordneten Containers festlegen
- 28. Redux Keep-Sitzung
- 29. Festlegen des svn-Stammverzeichnisses in der Untersicht
- 30. Festlegen des Speicherhaltepunkts in Visual Studio 2012
Dank für die Post aber die Frage nicht beantworten. Bei der Frage geht es nicht darum, Keep am Leben zu lassen, sondern über Keep Alive Timeout. Also möchte ich am Leben bleiben und ich möchte seine Dauer kontrollieren. –
Url nicht gefunden, es ist schade – Kiquenet