2011-06-30 26 views
12

Tengo un cliente WCF que utiliza un wsHttpBinding, me gustaría habilitar http keep-alive.WCF wsHttpBinding con http keepalive

Espero poder activar esto simplemente cambiando la configuración del cliente ... He encontrado muchas descripciones de cómo activar keep-alives para una vinculación básica de HTTP, pero no tuve suerte con wsHttpBinding ... ¿es posible?

Muchas gracias.

Aquí es mi cliente de enlace:

<wsHttpBinding> 
    <binding name="WSHttpBinding_IRepositoryService" closeTimeout="00:00:10" 
     openTimeout="00:00:10" receiveTimeout="00:05:00" sendTimeout="00:05:00" 
     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="655360" messageEncoding="Mtom" 
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="81920" maxArrayLength="163840" 
     maxBytesPerRead="409600" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" 
     enabled="true" /> 
     <security mode="Message"> 
     <transport clientCredentialType="Windows" proxyCredentialType="None" 
      realm=""> 
      <extendedProtectionPolicy policyEnforcement="Never" /> 
     </transport> 
     <message clientCredentialType="Windows" negotiateServiceCredential="true" 
      algorithmSuite="Default" establishSecurityContext="true" /> 
     </security> 

    </binding> 
</wsHttpBinding> 

Respuesta

22

Vas a tener que utilizar un custom binding con el fin de desactivar la cabecera Keep-Alive, ya que la función no está expuesta en cualquiera de las clases incorporadas de unión.

La forma más fácil de lograr esto sin tener que definir un enlace personalizado desde cero, es personalizar la instancia existente BasicHttpBinding o WSHttpBinding asociada al proxy del cliente en el código.

He aquí un ejemplo:

var proxy = new MyServiceClient(); 
var customBinding = new CustomBinding(proxy.Endpoint.Binding); 
var transportElement = customBinding.Elements.Find<HttpTransportBindingElement>(); 
transportElement.KeepAliveEnabled = false; 

proxy.Endpoint.Binding = customBinding; 
+0

En este caso, la misma configuración no tiene que aplicarse en el lado del servidor. Mantener activa es la función de transporte HTTP y depende de cada participante cómo se configurará. –

+0

@Ladislav Mrnka Absolutamente correcto. Sin embargo, esta configuración * podría * aplicarse en el servidor. Actualicé mi respuesta. –

+0

Muchas gracias. No me di cuenta de que los keepalives estaban habilitados por defecto, así que eso es menos importante para mí :) – Nathan

4

mantener vivo está activado por defecto en todos los enlaces basados ​​HTTP y no es posible apagarlo. Si desea desactivarlo, debe crear un enlace personalizado completamente nuevo y establecer keepAliveEnabled como falso en el elemento de enlace httpTransport.

+5

Para ser claros, no es posible desactivar keep-alive en los enlaces basados ​​en http incorporados (basicHttpBinding, wsHttpBinding, etc. ..) porque estos enlaces no exponen la propiedad. Se puede desactivar en enlaces personalizados. Sé que eso es lo que dijiste, pero la forma en que lo redactaste fue confuso y quería aclararlo. –

Cuestiones relacionadas