Tenemos un servicio WCF (BasicHttpBinding) que siempre falla después de 30 segundos. Las llamadas de menos de 30 segundos se completan sin error. Algo más de 30 segundos se producirá un error con una excepción 502 Pasarela incorrecta:WCF Las llamadas de servicio siempre fallan después de 30 segundos con (502) Bad Gateway
System.Net.WebException: The remote server returned an error: (502) Bad Gateway.
Pero sin embargo, la llamada WCF continúa funcionando en segundo plano (y con el tiempo se completa). Hemos confirmado que BasicHttpBinding - Binding - sendTimeout (en web.config) tiene más de 30 segundos (en realidad está configurado en 5 minutos). Confirmamos esto tanto en el cliente como en el servidor.
Aquí está la traza completa:
System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (502) Bad Gateway. ---> System.Net.WebException: The remote server returned an error: (502) Bad Gateway.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- End of inner exception stack trace ---
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
Alguna idea donde esta 30 segundos "tiempo de espera" viene de o por qué se devuelve un error 502 Pasarela incorrecta?
SOLUCIÓN: Estamos utilizando el Módulo de enrutamiento de solicitud de aplicación IIS7 que tiene su propia configuración de Proxy. La configuración Proxy tiene un tiempo de espera predeterminado de 30 segundos. Aumentar esto a 600 segundos (10 minutos) resolvió nuestro problema. El error de Bad Gateway no es del todo correcto, pero WCF Trace Viewer (ver respuesta) ayudó a ver que el problema no era el servicio en sí, sino un problema entre el cliente y el servicio wcf.
Hemos intentado aumentar closeTimeout, openTimeout y receiveTimeout a 5 minutos (en el cliente y el servidor) y todavía vemos el problema. –
Gracias por la información en WCF Service Trace Viewer. Lo usé para recopilar un rastro tanto en el cliente como en el servidor, pero lo único que veo es que el servidor está completando correctamente, pero el cliente termina con una "Respuesta HTTP mal recibida" con el mensaje interno "El servidor remoto devuelto una respuesta inesperada: (502) Bad Gateway ". El servidor finaliza después de 42 segundos y el cliente obtiene el error en 31 segundos.Siempre es 31 segundos para el cliente. –
Lo descubrí. Estamos utilizando el Módulo de enrutamiento de solicitud de aplicación IIS7, que tiene una configuración Proxy, una de las cuales fue un tiempo de espera de 30 segundos. El uso de WCF Service Trace Viewer me ayudó a comprender que el servicio WCF no era el problema sino algo intermedio entre el cliente y el servicio. –