2010-05-26 43 views
18

Tengo una aplicación web ASP.NET que no puedo modificar (solo tengo los binarios). Esta aplicación se conecta a un servicio web y parece que la conexión está cerrada desde el lado del cliente (mi aplicación web). He aumentado el "executionTimeout" en el machine.config del servidor de destino pero mi aplicación web parece detenerse aún después de esperar un tiempo.¿Cómo aumentar el tiempo de espera a una solicitud de servicio web?

¿Hay alguna forma de aumentar el tiempo de espera para mi aplicación web simplemente modificando el archivo web.config? Como dije ... no puedo modificar el tiempo de espera en el código así que mi única opción sería a través de archivos de configuración.

Gracias!

+0

¿Qué tipo de servicio web? ASP.NET/ASMX, o WCF ?? ASMX generalmente se maneja en código, a menos que haya hecho algo específico para poder especificar el tiempo de espera en config; WCF es config para casi todo ... –

+0

Los servicios web remotos son de hecho un servicio web ASP.NET ASMX. Como mencioné antes, no puedo cambiar el código en mi aplicación (ya que solo tengo los binarios). – sachaa

+0

¿Tiene un archivo de configuración? – Nix

Respuesta

24

Intente si esto le funcionara.

En primer lugar, debe aumentar el tiempo de espera del atributo executionTimeout del elemento httpRuntime. Tenga en cuenta que esto se menciona en segundos a diferencia de los otros atributos de tiempo de espera como el tiempo de espera de la sesión y otros.

<httpRuntime 
    executionTimeout="36000" 

Y por otra parte, este atributo sólo tiene efecto cuando se establece el atributo de depuración del elemento de compilación en false. Esto también se especifica en el enlace de MSDN que mencionaste. Me gusta,

<compilation 
    debug="false" 
../> 

Pero esto funciona junto con el tiempo de espera de la sesión. Sí, si la sesión expira, se lanzará un error. y no esperaría a que el valor de executionTimeout surta efecto. por lo que también necesita establecer el tiempo de espera de la sesión en un valor más alto. Y tenga en cuenta que esto es en minutos. que se vería así,

<sessionState 
    mode="InProc" 
    timeout="360" 
    ... 
    /> 

Y tenga en cuenta que todo esto sería anulado por el proceso de reciclaje de la plataforma de aplicaciones. por lo tanto, debe establecer el valor de Tiempo de inactividad del Apppool que utiliza su sitio web al menos al mismo valor o más alto que el tiempo de espera de la sesión.

lo encontré aquí http://www.eggheadcafe.com/community/aspnet/17/10111748/how-can-we-increase-the-t.aspx

+0

Estoy ligeramente sorprendido de que la sesión pueda expirar mientras se está ejecutando una solicitud en esa sesión. –

+0

Por cierto, puede probarlo también en VS2008 "dummy IIS" si establece la depuración en falso. – daitangio

+2

36000 segundos = 600 minutos – martijn

4

El tiempo de espera predeterminado de la aplicación web es de 90 segundos, que es por lo general más que suficiente para un uso general. Es importante tener en cuenta de dónde viene el tiempo de espera. ¿Es de la página en sí o de algo en la página que lo está causando? En cualquier caso, parecería que la "página" se está agotando.

Me encontré con esta pregunta ya que mi página también se agotó. Descubrí que la excepción provenía de SQL (léase el error real), por lo que realmente era un problema de SQL. Una vez que lo supiera, podría arreglarlo fácilmente.

+0

I + 1 en esto porque con demasiada frecuencia un desarrollador joven se ejecutará directamente a la bomba de tiempo de espera. Cuando en realidad, una pesada llamada como Regex o una consulta SQL que no usa campos indexados o algo así es el problema. Siempre asuma primero que el Timout es lo suficientemente extenso y que está siendo reparado porque se podría optimizar algo en el código. Solo como una decisión educada de diseño debería aumentarse el tiempo de ejecución. – Suamere

+0

Mi tiempo de espera fue causado por una consulta que tardó 1 minuto 43 segundos, escrita por un colega. Había tantas subcláusulas complejas y selecciones de selects que tuve miedo de tocarlo. Pero saqué una cláusula en una tabla temporal y ejecuté una consulta LEFT (, LEN (REPLACE (....))) en la tabla temporal en lugar de en una subcláusula de la consulta. Luego uní la consulta a la tabla temporal. Tiempo de ejecución: hasta 2 segundos. Tomó aproximadamente media hora. [Golpes en los dedos]. – Resource

Cuestiones relacionadas