2010-08-12 15 views
16

El canal de transporte Http en WCF usa conexiones HTTP persistentes de manera predeterminada. ¿Cómo controlar el tiempo de espera vivo para esas conexiones? El valor predeterminado es 100s. Encontré ese valor al monitorear la aplicación en Procmon. No he encontrado ninguna configuración en el elemento de enlace de transporte HTTP que configura este tiempo de espera. ¿Hay alguna clase .NET que pueda controlar ese tiempo de espera?Cómo configurar el intervalo de mantener activo para la conexión HTTP en WCF

Respuesta

7

Echa un vistazo aquí:

http://web.archive.org/web/20080721055556/http://blog.magenic.com/blogs/jons/archive/2007/05/04/The-Tao-of-Microsoft-WCF-CustomBinding-Configuration-Elements.aspx

Hay una discusión detallada de la manipulación de la propiedad mantener viva durante una conexión HTTP.

+2

Gracias por puesto, pero esto no responde a la pregunta. La pregunta no es sobre apagar, mantener vivo, sino sobre establecer el tiempo de espera con vida. Así que quiero tener activado mantener activo y quiero controlar su duración. –

+3

URL no encontrada, es una lástima – Kiquenet

0

De this answer, y lo que puedo leer here, parece que quiere crear un enlace HTTP personalizado y establecer el atributo inactivityTimeout.

Desde el artículo de 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> 
+1

No. Quiero configurar HTTP mantener vivo no sesión Confiable mantener vivo. HTTP keep alive se describe en la especificación del protocolo HTTP. –

+0

Parece que las conexiones HTTP siempre deben ser persistentes, según RFC 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.1). – louisgab

+1

No lo creo. El RFC dice que la implementación HTTP debe implementar conexiones persistentes HTTP. No es que solo se deba usar una conexión persistente. –

0

¿Qué tal esto? Parece que puede ser una función de su servidor IIS y nada que ver con el servicio WCF? Sé que este enlace se aplica a IIS6, pero tal vez sirva de base para algo similar en IIS7. http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true

+1

Ya he intentado configurar el tiempo de espera de conexión en IIS y no funcionó. No está relacionado con mantener la configuración viva. De todos modos lo intentaré de nuevo durante los próximos días. Si funciona, estableceré la nueva recompensa y te premiaré. –

1

Me parece que quiere ajustar el encabezado HTTP Keep-Alive. Debería leer this article en HTTP keep-alive y determinar primero si esto es realmente algo que valga la pena.

Si es así, intente crear un Message Inspector. Esto debería permitirle modificar los encabezados HTTP para cada mensaje que se envía:

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; 
    } 

    // ... 
} 
+2

Esta idea es interesante. Vi algo así en comunicación con Cassini, pero creo que no es un encabezado estándar. De todos modos lo intentaré durante los próximos días. Si funciona, estableceré la nueva recompensa y te premiaré. –

+0

Por cierto. No necesito usarlo. Solo quiero saber si es posible cambiarlo de alguna manera y de dónde viene el valor predeterminado 100s. –

+0

@Ladislav Mrnka: Perdón por esconder esta publicación anterior, pero ¿has podido establecer o leer este valor HTTP de mantener vivo?Si es así, estaría muy interesado en saber más al respecto. Gracias –

1

Encontré la solución para esto. El problema es que el kernel subyacente http.sys tiene su propio tiempo de espera y romperá la conexión.

http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/ 

netsh http add timeout timeouttype=idleconnectiontimeout value=120 

Además, esta pregunta es similar a este What 130 second timeout is killig my WCF streaming service call?

Cuestiones relacionadas