HTTP状态504
当我的win32(c#)应用程序调用web服务时,出现以下错误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的设置时间延长了 期待您的回复,并提前向您表示感
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指定的上游服务器收到及时响应。”()它很可能表示源服务器有某种问题,因此它没有快速响应转发的请求 可能的解决方案,其中没有一个可能让你快乐:
- 增加代理的超时值(如果在您的控制下)
- 向其他服务器发出请求(如果有其他服务器具有相同的数据)
- 以不同的方式提出请求(如果可能的话),以便一次请求更少的数据
- 请在服务器没有问题时重试
"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服务器)对于代理服务器(试图代表您访问源服务器的中间服务器)太慢。