2010-07-28 9 views
10

¿Alguien puede explicarme cuál es la diferencia entre la configuración de tiempo de espera en el servidor vesus en el cliente? Por ejemplo, ¿qué pasaría si un cliente establece sendTimeout en 5 minutos mientras que la configuración en el servidor lo tiene establecido durante 1 minuto? ¿El cliente prevalece ya que inicia la comunicación?WCF timeout cliente vs servidor

Gracias por su ayuda!

Respuesta

2

El valor más pequeño gana - si su cliente tiene 5 minutos, pero el servidor solo 1 minuto - la llamada se cortará después de 1 minuto.

Así que estableciendo un valor específico en el lado del servidor, puede evitar que los clientes esperen demasiado tiempo para sus respuestas; cualquier valor superior que tengan no tendrá efecto.

+0

Gracias por la respuesta Marc! Si lo agrega para tener un enlace a MSDN o si lo dice, ¿podría publicarlo aquí? Solo para referencia. Gracias de nuevo ! –

+1

He probado el mismo escenario con WCF 3.5. Configuré el lado del cliente sendTimeout en 20 segundos y el servidor en el tiempo de envío en 10 segundos y la operación ficticia tardaba 2 minutos. El servicio agota el tiempo de espera después de 20 segundos, que el cliente establece.También traté de invertir los tiempos de espera, el cliente establece sendTimeout en 10 segundos y el servidor lo establece en 20 segundos y el servicio agota el tiempo en 10 segundos. Lo que significa que la configuración del cliente tiene preferencia sobre la configuración del servidor. ¡Extraño! Creo que el razonamiento de Marc detrás de la configuración del servidor era apropiado. –

+0

No estoy de acuerdo con la respuesta de @marc_s tampoco. ¿Está posiblemente hablando de 'receiveTimeout' vs' inactivityTimeout' en error? Tengo un caso donde el * servidor * definido receiveTimeout se está utilizando en todos los casos – wal

2

Creo que tengo esto, eche un vistazo a http://omsite.blogspot.com/2008/04/playing-with-wcf-nettcpbinding-timeouts.html.

Cuando el cliente inicia la llamada al servidor, el lado del cliente sendTimeout y el lado del servidor receiveTimeout están en vigor. El cliente debe enviar (o enviar) todos los datos antes de que caduque el valor de receiveTimeout en el servidor. El servidor debe completar su operación y devolver los resultados al cliente antes de que caduque el conjunto sendTimeout establecido en el cliente.

Si los roles están invertidos, es decir, el servidor está abriendo la comunicación al cliente (como en una devolución de llamada, etc.), entonces entran en tiempo en el servidor sendTimeout y el cliente receiveTimeout.

Existe también OpenTimeout y CloseTimeout que controlan la conexión de canal de establecer tiempos de espera y de trabajo en los niveles más bajos de canal (cajas de cables, etc.)

+0

El enlace en esta respuesta está muerto. –

+0

Sí, el enlace está muerto. No puedo encontrar esa publicación :(. Sin embargo, he capturado la esencia de mi respuesta –

0

En pone a prueba la hipótesis de que hayas preguntado. El tiempo de espera de la solicitud es de 5 minutos, que se definió en el cliente

En el lado del cliente tiempos de espera

SendTimeout - se utiliza para inicializar el OperationTimeout, que regula todo el proceso de envío de un mensaje , incluido recibir un mensaje de respuesta para una operación de servicio de solicitud/respuesta. Este tiempo de espera también se aplica al enviar mensajes de respuesta desde un método de contrato de devolución de llamada.

ReceiveTimeout - no se utiliza

Por el lado de servicio Tiempos de espera

SendTimeout son los mismos que en el cliente

ReceiveTimeout - utilizado por el marco de servicios Capa para inicializar el tiempo de inactividad de la sesión que controla el tiempo que una sesión puede estar inactiva antes de que se agote el tiempo de espera.

Ver https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding