Il canale di trasporto HTTP in WCF utilizza connessioni HTTP permanenti per impostazione predefinita. Come controllare mantenere il timeout attivo per quelle connessioni? Il valore predefinito è 100 secondi. Ho trovato questo valore monitorando l'applicazione in Procmon. Non ho trovato alcuna impostazione nell'elemento di binding del trasporto http che configura questo timeout. C'è qualche classe .NET che può controllare quel timeout?Come impostare l'intervallo keep-alive per la connessione HTTP in WCF
risposta
dare uno sguardo qui:
C'è una discussione dettagliata di manipolare il mantenere la proprietà in vita durante una connessione http.
Da this answer e quello che posso leggere here, sembra che si desideri creare un binding http personalizzato e impostare l'attributo inactivityTimeout
.
Dall'articolo MSDN:
<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>
No. Voglio impostare HTTP keep alive Non è possibile mantenere una sessione affidabile. HTTP keep alive è descritto nelle specifiche del protocollo HTTP. –
Sembra che le connessioni HTTP siano sempre persistenti, come da RFC 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.1). – louisgab
Non credo. La RFC afferma che l'implementazione HTTP dovrebbe implementare connessioni persistenti HTTP. Non si dovrebbe usare solo la connessione persistente. –
ne dici di questo? Sembra che potrebbe essere una funzione del tuo server IIS e nulla a che fare con il servizio WCF? So che questo collegamento si applica a IIS6, ma forse serve come base per qualcosa di simile in IIS7? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true
Ho già provato a configurare il timeout della connessione su IIS e non ha funzionato. Non è legato al mantenimento della vita. Comunque lo riproverò nei prossimi giorni. Se funziona, stabilirò la nuova taglia e ti assegnerò. –
Mi sembra che tu voglia regolare l'intestazione HTTP Keep-Alive
. Dovresti leggere this article su HTTP keep-alive e determinare se è davvero qualcosa che vale la pena.
In caso affermativo, provare a creare un Message Inspector. Ciò dovrebbe consentire di modificare le intestazioni HTTP per ogni messaggio che viene inviato:
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;
}
// ...
}
Questa idea è interessante. Ho visto qualcosa di simile in comunicazione con Cassini, ma penso che non sia l'intestazione standard. Comunque lo proverò nei prossimi giorni. Se funziona, stabilirò la nuova taglia e ti assegnerò. –
Btw. Non ho bisogno di usarlo. Voglio solo sapere se è possibile cambiarlo in qualche modo e da dove proviene il valore predefinito 100s. –
@Ladislav Mrnka: Ci scusiamo per svelare questo vecchio post, ma sei stato in grado di impostare o leggere questo valore keep-alive HTTP.Se sì, sarei molto interessato a saperne di più. Grazie –
Ho trovato la soluzione per questo. Il problema è che il kernel http.sys sottostante ha il proprio timeout e interromperà la connessione.
http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/
netsh http add timeout timeouttype=idleconnectiontimeout value=120
Inoltre, questa domanda è simile a questo What 130 second timeout is killig my WCF streaming service call?
- 1. HTTP persistente/keepalive con la libreria PHP Curl?
- 2. Soluzione keepalive per Android http, ma è permanente?
- 3. uWSGI keepalive
- 4. HTTP connessione persistente vs connessione socket TCP
- 5. Come impostare un timeout della connessione nel client http Apache?
- 6. Limiti di connessione WCF
- 7. Chiusura connessione WCF
- 8. Come impostare le credenziali proxy per un client wcf specifico?
- 9. Come testare la connessione persistente in un server HTTP?
- 10. Come impostare le intestazioni in http ottenere la richiesta?
- 11. Come impostare timeout di connessione in SQLAlchemy
- 12. Come impostare l'intestazione HTTP predefinita in Angular2?
- 13. WCF Rest Service - Accesso all'intestazione HTTP Reponse
- 14. NET TCP/HTTP WCF ospitato in IIS
- 15. Come impostare un'intestazione in una risposta HTTP?
- 16. WCF WebGet Cattura referrer HTTP?
- 17. Connessione Kerberos tramite client HTTP
- 18. Connessione HTTP Android rifiutata
- 19. Come creare una connessione Http usando la classe AsyncTask?
- 20. Come condividere la connessione mysql tra le goroutine http?
- 21. Come avvisare quando la connessione HTTP non funziona su iPhone?
- 22. Come rendere Flask/mantenere attiva la connessione HTTP Ajax?
- 23. uso corretto di KeepAlive in Apache .htaccess
- 24. Come impostare la stringa di connessione al contesto con CloudConfigurationManager?
- 25. Connessione HTTP http con OkHttp Non funziona
- 26. Come impostare la stringa di connessione di SQL Server?
- 27. Mantieni una connessione http attiva in C#?
- 28. Come impostare il RequestFormat predefinito per un ServiceContract WCF?
- 29. Come impostare l'autenticazione oAuth per un sito CEST REST WCF
- 30. Come cambiare il timer keepalive tcp usando lo script python?
Grazie per post, ma questo non risponde alla domanda. La domanda non riguarda lo spegnimento, ma mantenere il timeout. Quindi voglio tenere vivo il turno e voglio controllarne la durata. –
Url non trovato, è un peccato – Kiquenet