webservice valor tiempo receivetimeout pasado llamada espera aumentar aumenta wcf

valor - WCF Service, ¿cómo aumentar el tiempo de espera?



wcf time out (4)

Puede parecer una pregunta tonta, pero todo en WCF parece mucho más complicado que en asmx, ¿cómo puedo aumentar el tiempo de espera de un servicio de svc?

Esto es lo que tengo hasta ahora:

<bindings> <basicHttpBinding> <binding name="IncreasedTimeout" openTimeout="12:00:00" receiveTimeout="12:00:00" closeTimeout="12:00:00" sendTimeout="12:00:00"> </binding> </basicHttpBinding> </bindings>

Y luego mi punto final se mapea así:

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="IncreasedTimeout" contract="ServiceLibrary.IDownloads"> <identity> <dns value="localhost" /> </identity> </endpoint>

El error exacto que obtengo:

El canal de solicitud agotó el tiempo de espera mientras esperaba una respuesta después de 00: 00: 59.9990000. Aumente el valor de tiempo de espera pasado a la llamada para Solicitar o aumente el valor de SendTimeout en el Enlace. El tiempo asignado a esta operación puede haber sido una porción de un tiempo de espera más largo.

En WCF Test Client, hay un ícono de configuración que contiene la configuración de tiempo de ejecución de mi servicio:

Como puede ver, ¿no son los mismos valores que he establecido para él? ¿Qué estoy haciendo mal?

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


En su configuración de enlace, hay cuatro valores de tiempo de espera que puede modificar:

<bindings> <basicHttpBinding> <binding name="IncreasedTimeout" sendTimeout="00:25:00"> </binding> </basicHttpBinding>

El más importante es sendTimeout , que indica cuánto tiempo esperará el cliente una respuesta de su servicio WCF. Puede especificar hours:minutes:seconds en su configuración: en mi muestra, configuré el tiempo de espera en 25 minutos.

El openTimeout como su nombre lo indica es la cantidad de tiempo que está dispuesto a esperar cuando abre la conexión a su servicio WCF. De forma similar, closeTimeout es la cantidad de tiempo que cierra la conexión (disponga del proxy del cliente) que esperará antes de que se produzca una excepción.

El receiveTimeout es un poco como un espejo para sendTimeout - mientras que el tiempo de espera de envío es la cantidad de tiempo que esperará una respuesta del servidor, el receiveTimeout es la cantidad de tiempo que le dará a su cliente para recibir y procesar el respuesta del servidor.

En caso de que se le envíen mensajes "normales" de ida y vuelta, ambos pueden ser bastante cortos, especialmente el receiveTimeout , ya que recibir un mensaje SOAP, descifrarlo, verificarlo y deserializarlo no debería tomar mucho tiempo. La historia es diferente con la transmisión, en ese caso, es posible que necesite más tiempo en el cliente para completar la "descarga" de la transmisión que recibe del servidor.

También hay openTimeout, receiveTimeout y closeTimeout. Los documentos de MSDN sobre el enlace le dan más información sobre para qué sirven.

Para tener un control serio de todas las intrigas de WCF, recomiendo encarecidamente que compre el libro " Learning WCF " de Michele Leroux Bustamante:

Aprendiendo WCF http://ecx.images-amazon.com/images/I/51GNuqUJq%2BL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

y también pasas un tiempo mirando su serie de screencast de 15 partes " WCF Top to Bottom " - ¡muy recomendable!

Para temas más avanzados, le recomiendo que consulte el libro de Servicios de WCF de programación de Juwal Lowy.

Programando WCF http://ecx.images-amazon.com/images/I/41odWcLoGAL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg


Hace poco recibí el mismo error, pero pude solucionarlo asegurándome de cerrar cada llamada al cliente wcf. p.ej.

WCFServiceClient client = new WCFServiceClient (); //More codes here // Always close the client. client.Close();

o

using(WCFServiceClient client = new WCFServiceClient ()) { //More codes here }


La configuración de tiempo de espera debe establecerse en el nivel del cliente, por lo que la configuración que estaba configurando en el web.config no tuvo ningún efecto, la herramienta de prueba WCF tiene su propia configuración y allí es donde necesita establecer el tiempo de espera.


La mejor manera es cambiar cualquier configuración que desee en su código.

Mira el siguiente ejemplo:

using(WCFServiceClient client = new WCFServiceClient ()) { client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 1, 30); }