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!
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