HTTP状态504

当我的win32(c#)应用程序调用webservices时出现以下错误。

“请求失败,HTTP状态504:网关超时服务器响应超时。 我理解“我认为”这是因为上游请求没有得到及时的答复。

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

期待一个回应,并提前感谢你。 斯科特

你不能。 问题不是你的应用程序不耐烦而且超时; 问题是中间代理不耐烦,超时。 “作为网关或代理的服务器没有收到由URI指定的上游服务器的及时响应。 ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5 )这很可能表示源服务器存在某种问题,所以它不会对转发的请求做出快速响应。

可能的解决scheme,其中没有一个可能让你感到高兴:

  • 增加代理的超时值(如果在您的控制之下)
  • 向不同的服务器发送请求(如果有另一台服务器具有相同的数据)
  • 以不同的方式提出您的请求(如果可能的话),这样您一次只需要较less的数据
  • 一旦服务器没有问题,再试一次

CheckUpDown 对504错误有一个很好的解释 :

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

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

此问题完全是由于后端计算机(可能包括Web服务器)之间的IP通信速度较慢。 只有在承载Web服务器的站点上build立networking的人才可以解决这个问题。

假设访问代理服务器A(例如nginx),并且服务器A将该请求转发到另一个服务器B(例如tomcat)。

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

对于nginx,你可以configurationproxy_read_timeout(in location)属性来解决他的问题。但是这通常不是一个好主意,如果你设置的值太高。 这可能会掩盖真正的错误。你最好改进devise来真正解决这个问题。

如果您使用ASP.Net 5(现在称为ASP.Net Core v1)确保您的project.json“命令”部分中的每个站点托pipeKestrel代理侦听端口不同站点之间,否则一个站点将工作,但其他将返回504网关超时。

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

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

也许是关于你的networking代理设置。 看看http://rapid-i.com/rapidforum/index.php?topic=4436.0