valor tiempo pasado llamada espera aumenta .net windows wcf web-services exception-handling

.net - tiempo - WCF Windows Service TimeOut



aumenta el valor de tiempo de espera pasado a la llamada a request c# (9)

Tengo una aplicación cliente desarrollada en .net enviando una solicitud al servicio wcf y se supone que debe enviar una respuesta .if tiempo de ejecución en 1 minuto, no hay error, si excede 1 minuto el error es

Excepción interna: esta operación de solicitud enviada a net.tcp: // localhost: 18001 / PitToPort / 2008/01/30 / StockpileService / tcp no recibió una respuesta dentro del tiempo de espera configurado (00:01:00).
El tiempo asignado a esta operación puede haber sido una porción de un tiempo de espera más largo. Esto puede deberse a que el servicio aún está procesando la operación o porque el servicio no pudo enviar un mensaje de respuesta. Considere aumentar el tiempo de espera de la operación (transfiriendo el canal / proxy a IContextChannel y estableciendo la propiedad OperationTimeout) y asegúrese de que el servicio pueda conectarse con el cliente

¿Cómo aumentar el tiempo de espera y cómo? ¿Cuál es la mejor solución?


Aquí hay una solución mucho más simple ... solo establezca la propiedad directamente en el ClientBase actual. En otras palabras, primero agregue una referencia de servicio, inyitalícela y luego establezca la propiedad "InnerChannel.OperationTimeout"

NetUtilsWCF.SMTPDiagClient sClient = new NetUtilsWCF.SMTPDiagClient ();

sClient.InnerChannel.OperationTimeout = new TimeSpan (0, 5, 0);


El tiempo de espera se llama "sendTimeout" y puede configurarlo en su sección de enlace en su archivo de configuración, o en código: su elección.

config:

<system.serviceModel> <bindings> <netTcpBinding> <binding sendTimeout="00:03:00" /> </netTcpBinding> </bindings>

Esto establecerá el tiempo de espera en 3 minutos.

Bagazo


Experimenté este mismo error. Específicamente, la excepción que recibí fue:

System.ServiceModel.CommunicationException: la conexión del socket se canceló. Esto podría deberse a un error al procesar su mensaje o un tiempo de espera de recepción excedido por el host remoto o un problema de recursos de red subyacente. El tiempo de espera del socket local fue ''00: 09: 59.9940000 ''.

System.IO.IOException: la operación de escritura falló, vea la excepción interna.

System.ServiceModel.CommunicationException: la conexión del socket se canceló.

Esto podría deberse a un error al procesar su mensaje o un tiempo de espera de recepción excedido por el host remoto o un problema de recursos de red subyacente.

El tiempo de espera del socket local fue ''00: 09: 59.9940000 ''.

System.Net.Sockets.SocketException: una conexión existente fue cerrada a la fuerza por el host remoto

La causa de mi problema se debió al tamaño del mensaje que mi WCF Client enviaba al servidor de WCF. Aparentemente, el tamaño del mensaje era demasiado grande.

Para solucionar el problema, cambié el atributo de los hosts Web.Config maxReceivedMessageSize de 2097152 a 8000000 y el error ya no persiste.

Aquí está el atributo de Web.Config al que me refiero:

<netTcpBinding> <binding name="NetTCPBinding" maxReceivedMessageSize="8000000"> .... </binding> </netTcpBinding>

El tamaño del mensaje de 8M que elegí se basó en lo grande que "creo" que es el tamaño del mensaje. No sé de una forma de determinar explícitamente el tamaño del mensaje WCF real que pasa del cliente al host.


He agregado el siguiente código al código de la aplicación de servicio

system.transactions defaultSettings timeout="00:30:00"

con este código el servicio esperará 30 minutos para completar el proceso en el servidor de la base de datos y aumentar el

maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647"

en los atributos de enlace del cliente, entonces funciona bien.

Problema: el servicio está enviando una respuesta pero el búfer de cliente era menos anterior, aumenté al tamaño máximo de búfer.



Obtuve la misma excepción cuando uso la devolución de llamada. Funciona en prueba local (el cliente y el programa de servicio se ejecutan en la misma máquina) pero no funciona en el entorno del usuario (el programa de servicio se ejecuta en winserver 2008). El código del servidor se ha ejecutado de acuerdo con el registro. Creo que es debido a un problema de entorno o autoridad, pero no tengo idea de cómo manejarlo.


Si enfrenta el problema después de corregir el archivo de configuración, entonces puede que necesite verificar este atributo. "OperationContract(IsOneWay:=True)". Si pierde el IsOneWay:=True , puede causar este problema.


Si sabe por qué el servidor tarda más de un minuto en responder al cliente, entonces debe extender OperationTimeout del canal (como se dice en el mensaje de error).

Consulte esto, incluido un ejemplo de código al final: http://final-proj.blogspot.com/2009/09/wcf-timeouts.html

Buena suerte.


Tenga cuidado, este mensaje de error es una cadena repetitiva que WCF envía cuando no tiene una pista de lo que sucedió. Realmente significa "mmh algo salió mal en la cadena pero no estoy muy seguro de qué, así que, aquí hay algunas trivialidades sobre la configuración, haz lo que quieras con ella".

LA MAYORÍA DE LAS VECES cuando recibe este mensaje no tiene nada que ver con los tiempos de espera reales. Puede ser cuotas (cantidad de objetos en el gráfico, tamaño total, longitud de la matriz) o algo que salió mal del lado del servidor, entre el momento en que su método de servicio arrojó un resultado y los bytes reales fueron enviados a través del cable. Por lo tanto, debe verificar su configuración (y no el tiempo de espera, excepto si realmente tuvo que esperar un minuto para obtener el error. Si obtuvo el error de inmediato, no tiene nada que ver con los tiempos de espera en absoluto).

Este mensaje inútil está en la parte superior de mi lista de molestias WCF.