Wir haben einen WCF-Dienst (BasicHttpBinding), der immer nach 30 Sekunden fehlschlägt. Anrufe unter 30 Sekunden werden ohne Fehler abgeschlossen. Alles, was mehr als 30 Sekunden mit einer 502 Bad Gateway Ausnahme fehlschlagen:WCF-Serviceaufrufe schlagen immer nach 30 Sekunden fehl mit (502) Bad Gateway
System.Net.WebException: The remote server returned an error: (502) Bad Gateway.
aber noch der WCF Anruf läuft im Hintergrund (und wird schließlich vollständig) laufen. Wir haben bestätigt, dass BasicHttpBinding - Binding - sendTimeout (in web.config) größer als 30 Sekunden ist (tatsächlich auf 5 Minuten festgelegt). Wir haben dies sowohl auf dem Client als auch auf dem Server bestätigt. Hier
ist die volle Stack-Trace:
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)
Irgendwelche Ideen, wo diese 30 Sekunden "timeout" herkommt, warum ein 502 Bad Gateway Fehler zurückgegeben wird?
LÖSUNG: Wir verwenden das IIS7 Application Request Routing-Modul, das über eigene Proxy-Einstellungen verfügt. Die Proxy-Einstellungen haben eine Standard-Zeitüberschreitung von 30 Sekunden. Die Erhöhung auf 600 Sekunden (10 Minuten) löste unser Problem. Der Bad Gateway-Fehler ist nicht vollständig korrekt, aber WCF Trace Viewer (siehe Antwort) half zu sehen, dass das Problem nicht der Dienst selbst war, sondern ein Problem zwischen dem Client und dem WCF-Dienst.
Wir haben versucht, closeTimeout, openTimeout und receiveTimeout auf 5 Minuten zu erhöhen (auf Client und Server) und sehen immer noch das Problem. –
Danke für die Info zum WCF Service Trace Viewer. Ich habe es verwendet, um eine Ablaufverfolgung auf dem Client und Server zu sammeln, aber alles, was ich daraus sehe, ist, dass der Server ordnungsgemäß abgeschlossen wird, aber der Client endet mit einer "schlechten HTTP-Antwort erhalten" mit der internen Nachricht "Der Remote-Server zurückgegeben eine unerwartete Antwort: (502) Schlechtes Gateway. Der Server ist nach 42 Sekunden abgeschlossen und der Client erhält den Fehler nach 31 Sekunden.Es sind immer 31 Sekunden für den Client. –
Ich habe es herausgefunden. Wir verwenden das IIS7 Application Request Routing-Modul, das über Proxy-Einstellungen verfügt, von denen eine 30-Sekunden-Zeitüberschreitung war. Die Verwendung von WCF Service Trace Viewer half mir zu verstehen, dass der WCF-Dienst nicht das Problem war, sondern etwas zwischen dem Client und dem Dienst. –