2010-06-17 13 views
5

Me estoy conectando a un servicio ASMX web suministrado por el proveedor y estoy enviando un conjunto de datos a través del cable. Mi primer intento golpeó el tiempo de espera de 1 minuto que Visual Studio arroja por defecto en el archivo app.config cuando agrega una referencia de servicio a un proyecto. Lo aumenté a 10 minutos, otro tiempo de espera. 1 hora, otro tiempo de espera:.NET Web Service (asmx) Tiempo de espera Problema

Error: System.TimeoutException: The request channel timed out while waiting for 
a reply after 00:59:59.6874880. Increase the timeout value passed to the call to 
Request or increase the SendTimeout value on the Binding. The time allotted to 
this operation may have been a portion of a longer timeout. ---> System.TimeoutE 
xception: The HTTP request to 'http://servername/servicename.asmx' has exceeded the allotted timeout of 01:00:00. The time allotted to this 
operation may have been a portion of a longer timeout. ---> System.Net.WebExcept 
ion: The operation has timed out 
    at System.Net.HttpWebRequest.GetResponse() [... lengthly stacktrace follows] 

Me puse en contacto con el proveedor. Confirmaron que la llamada podría demorar más de una hora (no preguntes, son la perdición de mi existencia). Aumenté el tiempo de espera a 10 horas para estar seguro. Sin embargo, la llamada al servicio web continúa con el tiempo de espera en 1 hora. La sección app.config relevante ahora se ve así:

<basicHttpBinding> 
    <binding name="BindingName" closeTimeout="10:00:00" 
        openTimeout="10:00:00" receiveTimeout="10:00:00" sendTimeout="10:00:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="2147483647" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    <security mode="None"> 
     <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
    </security> 
    </binding> 
    </basicHttpBinding> 

Bastante absurdo, pero sin tener en cuenta el tiempo de espera todavía está dando inicio a la 1 hora. Desafortunadamente, cada cambio lleva al menos una hora adicional para probar. ¿Hay algún límite interno al que me estoy enfrentando, otro ajuste de tiempo de espera para cambiar en alguna parte? Todos los cambios en estas configuraciones hasta una hora tuvieron el efecto esperado.

¡Gracias por cualquier ayuda que pueda proporcionar!

+0

Cuando se inicia en una hora, ¿es exactamente la misma excepción que se obtiene cuando el tiempo de espera se establece en 1 minuto? –

+0

Sí, es el mismo error. –

Respuesta

4

En primer lugar: Ver respuesta de Steven Cheng [MSFT] here sobre tiempos de espera. Hay un tiempo de espera de ejecución que puede establecer para httpRuntime. Él dice algo interesante después de eso, que es "Además, asegúrate de haber configurado la 'compilación debug =" false' 'como hacer que el tiempo de espera funcione correctamente "

Además de que algo puede ser terriblemente mal por su parte (o los datos devueltos son tan voluminosos/no voy a juzgar - podría ser una buena razón), ¿ha intentado llamar a su operación de forma asincrónica? ¿Los mismos resultados? Supongo que tomaría una hora

YourVendor.WebService ws = new YourVendor.WebService(); 
ws.LongRunningOperationCompleted += new YourVendor.LongRunningOperationEventHandler(ws_LongRunningOperationCompleted); 

ws.LongRunningOperationAsync(); 

// Implement the ws_LongRunningOperationCompleted handler (stub will auto generate) 

El controlador de eventos completado tendrá un parámetro específico evento args, que contendrá los resultados, para los argumentos del evento e, e.Result debe tener lo que necesita cuando se complete.

+0

El archivo web.config del lado del cliente no tenía ningún elemento httpRuntime, así que agregué uno con un tiempo de espera muy grande, luego lo inicié de nuevo. Veremos en una hora, gracias! –

+0

En cuanto a la opción de sincronización, podría abrir el cofre y cambiar la llamada a asincrónico. ¿Son aquellos generalmente más tolerantes a los tiempos de espera, se ejecutan de manera diferente? Los datos no son demasiado voluminosos, pero tienen que procesarse en el otro extremo antes de que se devuelvan los resultados, y quien escribió el código de procesamiento no tenía la intención de rendir más allá de un determinado tamaño de datos. –

+0

@BarryFandango: Hola Barry, ¿Cómo resolviste el problema? Establecí el tiempo de espera de httpRuntime en un valor grande y también establecí la depuración de compilación en falso. Todavía recibo el mismo error después de 1 hora – MichaelS

Cuestiones relacionadas