HTTP状态504

HTTP状态504,http,Http,当我的win32(c#)应用程序调用web服务时,出现以下错误 The request failed with HTTP status 504: Gateway timeout server response timeout. 我理解“我认为”这是因为上游请求没有及时得到响应 但我的问题是?如何更改win32应用程序中的app.config设置,以便有更多时间处理其数据。我假设我需要对我的应用程序设置进行这些更改,因为承载ws的Web服务和IIS的设置时间延长了 期待您的回复,并提前向您表示感

当我的win32(c#)应用程序调用web服务时,出现以下错误

The request failed with HTTP status 504: Gateway timeout server response timeout.
我理解“我认为”这是因为上游请求没有及时得到响应

但我的问题是?如何更改win32应用程序中的app.config设置,以便有更多时间处理其数据。我假设我需要对我的应用程序设置进行这些更改,因为承载ws的Web服务和IIS的设置时间延长了

期待您的回复,并提前向您表示感谢

斯科特检查有:

服务器(不一定是Web服务器)充当网关或代理,以满足客户端(例如您的Web浏览器或我们的CheckUpDown robot)访问请求URL的请求。此服务器没有从其访问以处理您的HTTP请求的上游服务器收到及时响应

这通常意味着上游服务器停机(对网关/代理没有响应),而不是上游服务器和网关/代理在交换数据的协议上不一致

此问题完全是由于后端计算机(可能包括Web服务器)之间的IP通信速度较慢所致。只有在承载Web服务器的站点上设置网络的人员才能解决此问题


你不能。问题不在于你的应用程序不耐烦和超时;问题是中间代理不耐烦,而且超时。“服务器在充当网关或代理时,没有从URI指定的上游服务器收到及时响应。”()它很可能表示源服务器有某种问题,因此它没有快速响应转发的请求

可能的解决方案,其中没有一个可能让你快乐:

  • 增加代理的超时值(如果在您的控制下)
  • 向其他服务器发出请求(如果有其他服务器具有相同的数据)
  • 以不同的方式提出请求(如果可能的话),以便一次请求更少的数据
  • 请在服务器没有问题时重试
如果您使用ASP.Net 5(现在称为ASP.Net Core v1),请确保在您托管的每个站点的project.json“commands”部分中,Kestrel代理侦听端口在站点之间不同,否则一个站点将工作,但另一个站点将返回504网关超时

 "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5090"
  },

关于这个错误,我观察到的一件事是,它只出现在服务器的第一个响应中,在http的情况下,它应该是握手响应。一旦从服务器向网关发送即时响应,如果在主响应花费时间之后,它不会给出错误。这里的关键是服务器对请求的第一次响应应该是快速的

假设访问一个代理服务器a(例如nginx),服务器a将请求转发给另一个服务器B(例如tomcat)

如果此过程持续很长时间(超过代理服务器读取超时设置),a仍然没有得到B的完整响应。 这是常有的事


对于nginx,您可以配置proxy\u read\u timeout(in location)属性来解决his。但是如果您将该值设置得太高,这通常不是一个好主意。这可能会隐藏真正的错误。您最好改进设计,以真正解决此问题。

我遇到另一个问题,给了我一个504。这是相当遥远的,但我会写在这里谷歌和子孙后代

我有一个客户端调用另一个域(Active Directory)中托管的IIS托管Web服务。客户端域和承载web服务的域之间没有完全信任。 这两个域之间的选择性信任面临的诸多挑战之一是Kerberos在从一个域调用到另一个域时不起作用

在我的例子中,我试图调用另一个域中的服务,在那里我发现一个SPN已注册。如下所示:http/myurl.test.local(只是一个示例)

这迫使调用使用Kerberos,而不是让它退回到NTLM,这使我从调用服务器返回405

在删除spn并允许调用返回到NTLM后,它工作正常


正如我所说。。。这不是你可能遇到的事情,因为大多数组织都不会冒险在两个域之间建立这样的选择性信任。。。但它给出了一个504,并导致我出现了一些(更多)白发。

我也遇到了同样的问题,但重新启动
Apache
Tomcat
解决了这个问题。这是否意味着
源服务器(我假设它是我的web服务器)处理HTTP请求的速度太慢?这意味着源服务器(包含数据的web服务器)对于代理服务器(试图代表您访问源服务器的中间服务器)太慢。