2011-02-01 30 views
5

Tengo un proceso bastante largo basado en WCF. El servicio WCF se ejecuta en Azure si es de alguna ayuda. La cuestión que creo tiene que ver con los tiempos de espera:WCF ¿Tiempo de espera?

1) Winforms cliente tiene la siguiente configuración .config en la sección de unión:

<wsHttpBinding> 
    <binding name="XXX" closeTimeout="00:05:00" openTimeout="00:05:00" 
    receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" 
    transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
    maxBufferPoolSize="10000000" maxReceivedMessageSize="10000000" 
    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
    allowCookies="false"> 
    <readerQuotas maxDepth="255" maxStringContentLength="8192" maxArrayLength="16384" 
    maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
    enabled="false" /> 
    <security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
    <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="false"/> 
    </security> 
    </binding> 
</wsHttpBinding> 

2) servicio WCF tiene la siguiente sección de unión en el web.config

<wsHttpBinding> 
    <binding name="XXX" maxReceivedMessageSize="10000000" sendTimeout="00:10:00" receiveTimeout="00:10:00" closeTimeout="00:10:00" openTimeout="00:10:00"> 
    <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName" establishSecurityContext="false" /> 
    </security> 
    <readerQuotas maxArrayLength="2000000" maxBytesPerRead="10000000" maxStringContentLength="10000000" maxDepth="255" /> 
    </binding> 

    </wsHttpBinding> 

3) Tengo un método de larga duración en WCF (generalmente 2 minutos). Los clientes llaman al método y los que se ejecutan durante más de 1 minuto son expulsados ​​con una excepción. Esta es la excepción más interno:

<InnerException> 
    <Type>System.Net.Sockets.SocketException</Type> 
    <Message>An existing connection was forcibly closed by the remote host</Message> 
    <StackTrace> 
     <Frame>at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)</Frame> 
    </StackTrace> 
    </InnerException> 
</InnerException> 

4) El WCF llama a sí mismo completado con éxito, sin embargo (no tengo tanto de inicio/fin iniciar sesión en el servidor). ¿Cómo evito la excepción?

¡Gracias!

+0

Cada vez se tarda más de un minuto para correr, devuelve ese error. El error se devuelve al cliente precisamente después de un minuto. Sin embargo, el servidor todavía está terminando la llamada al método. – Igorek

Respuesta

8

El equilibrador de carga de Windows Azure finaliza las conexiones inactivas después de 60 segundos.

+1

Steve, wow, totalmente no sabía esto ... ¿hay alguna forma de extender el tiempo de espera? ¡Algunas llamadas pueden tardar más de 1 minuto en completarse! – Igorek

+0

Interesante. ¿Hay alguna forma de que Steve modifique este comportamiento, o la intención de los trabajos de larga ejecución es llevar a cabo un rol de trabajador con cola o algún otro método de tareas cruzadas? –

+0

No hay manera de que esto cambie en este momento. Sin embargo, si puede enviar datos periódicamente a través de la conexión TCP, permanecerá abierto. (Son solo las _idle_ conexiones las que terminan.) – smarx

Cuestiones relacionadas