webservice valor tiempo solicitud para operación net esta espera ejecución caducado aumentar agotó agotado c# wcf

c# - valor - El canal de solicitud agotó el tiempo de espera mientras esperaba una respuesta



tiempo de espera de la operación de espera agotado (3)

Tengo una pequeña aplicación que usa WCF para comunicarse con un servidor web. Este programa es utilizado por unos 200 clientes, y cada cliente envía entre 5 y 20 solicitudes / min.

Mirando los registros de errores que a menudo obtengo:

El canal de solicitud agotó el tiempo de espera mientras esperaba una respuesta después de 00: 00: 59.9989999

Las solicitudes se hacen de la siguiente manera:

ClientService Client = new ClientService(); Client.Open(); Client.updateOnline(userID); Client.Close();

Esta es la app.config

<configuration> <configSections> </configSections> <startup><supportedRuntime version="v2.0.50727"/></startup><system.serviceModel> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_IClientService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" /> </security> </binding> </wsHttpBinding> </bindings> <client> <endpoint address="PATH TO SERVICE" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IClientService" contract="IClientService" name="WSHttpBinding_IClientService"> <identity> <dns value="localhost" /> </identity> </endpoint> </client> </system.serviceModel>

De las "muchas llamadas" cada día fallan alrededor de 200-800. Y sobre n-1 están bien. Estoy muy confundido sobre cuál puede ser el problema. Al mirar las estadísticas del servidor, casi no está sudando: cada solicitud tarda menos de 2 segundos en procesarse. Los datos que envía consisten en "int" o "strings muy pequeños", por lo tanto, no es debido al tamaño, si lo hubiera, debería haber una falla constante.

Sugerencias?


Compruebe este contador de rendimiento: ASP.NET Requests Queued .

Una aplicación web puede alojar muchas páginas web y servicios. IIS procesa solo 12 solicitudes simultáneas por núcleo de CPU de forma predeterminada.

Esto significa que incluso si su servicio es rápido pero otras páginas / servicios son lentos, su solicitud debe esperar en la cola antes de que se ejecuten.

ASP.NET Requests Queued debe ser cero o cercano a cero.

Consulte Contadores de rendimiento para ASP.NET en MSDN .


Intente agregar los valores de tiempo de espera tanto al servicio como al cliente:

<binding name="BasicHttpBinding_SomeName" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">


Parece que sus solicitudes están haciendo cola en el servidor antes de ser manejadas y luego comienza el tiempo de espera. Puede probar algunas cosas aquí para ver exactamente qué está pasando

1) Pruebe la regulación en sus servicios de WCF, por ejemplo: intente aumentar sus sesiones concurrentes. Eche un vistazo WCF Throttling

2) Intente usar PerCall en lugar de usar sesiones aquí para asegurarse de que no quede ninguna sesión allí. Esto es lo que puede hacer en su interfaz para eliminar la sesión

[ServiceContract(Namespace="YOUR NAMESPACE", SessionMode=SessionMode.NotAllowed)]

y sus clases contractuales implementando esas interfaces

ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

Y .... Debe habilitar el rastreo para ver exactamente qué está pasando.