调用ASP.NET Web API时使用AJAX 504
我的AJAX调用在调用ASP.NET Web API操作时返回504错误 更多信息: 以下是我的API操作:调用ASP.NET Web API时使用AJAX 504,ajax,asp.net-web-api,timeout,asp.net-4.0,Ajax,Asp.net Web Api,Timeout,Asp.net 4.0,我的AJAX调用在调用ASP.NET Web API操作时返回504错误 更多信息: 以下是我的API操作: public HttpResponseMessage Get(string fileName, int feedID) { try { // create file... return new HttpResponseMessage { Content = new StringContent("Complete."), StatusCode
public HttpResponseMessage Get(string fileName, int feedID)
{
try
{
// create file...
return new HttpResponseMessage { Content = new StringContent("Complete."), StatusCode = HttpStatusCode.OK };
}
catch (Exception ex)
{
Log.WriteError(ex);
throw new HttpResponseException(new HttpResponseMessage
{
StatusCode = HttpStatusCode.InternalServerError,
Content = new StringContent("An error has occurred.")
});
}
}
以下是我的AJAX调用:
$.ajax({
url: url,
type: 'GET',
success: function () {
$("#lblProgressDownload").hide();
window.open("Previews/" + fileName);
},
error: function (xhr, status, error) {
$("#lblProgressDownload").hide();
alert("Error downloading feed preview: " + error);
}
});
当文件创建时间过长时,我收到一个504错误(在fiddler/chrome控制台中查看)。错误回调中的“error”参数不返回任何内容
我只有在托管504错误时才会收到它——在我的开发工具上,它工作正常
如何防止此504错误
注意,我已经尝试更改web.config中的executionTimeout属性以及ajax超时。两者都不起作用。HTTP错误504是:
服务器在充当网关或代理时,在尝试完成请求时未收到URI[…]指定的上游服务器的及时响应
我怀疑这意味着在您和生产服务器之间的某个地方有一个代理或网关,而不是您的开发服务器,这就是为什么它在一个服务器上失败,而在另一个服务器上失败的原因
您的选择是使服务器代码足够快,不会触发超时,或者让运行代理服务器的人放松超时限制(假设这是由您或您的公司控制的)。HTTP错误504是:
服务器在充当网关或代理时,在尝试完成请求时未收到URI[…]指定的上游服务器的及时响应
我怀疑这意味着在您和生产服务器之间的某个地方有一个代理或网关,而不是您的开发服务器,这就是为什么它在一个服务器上失败,而在另一个服务器上失败的原因
您的选择是使服务器代码足够快,不会触发超时,或者让运行代理服务器的人放松超时限制(假设这是由您或您的公司控制的)。考虑到此代理超时限制超出我的控制范围,是否有办法保持连接“活动”?您可以尝试的一件事是将您的设置为使用流式响应。然后编写响应处理程序以立即开始响应,即使只是http头,这将有望满足代理的初始超时。然后,您可以多花一点时间来完成其余响应流的发送。这需要在服务器端处理,而不是在客户端处理。我自己对此没有任何经验,但可能会有所帮助。我同意504是一个超时。。。如果你有一个大文件要传输,而且需要一段时间,我想知道你是否可以一次返回一部分文件。。。在有大型文档的情况下使用类似字节范围的支持。考虑到这个代理超时限制超出了我的控制范围,有没有办法让连接保持“活动”状态?您可以尝试的一件事是将您的设置为使用流式响应。然后编写响应处理程序以立即开始响应,即使只是http头,这将有望满足代理的初始超时。然后,您可以多花一点时间来完成其余响应流的发送。这需要在服务器端处理,而不是在客户端处理。我自己对此没有任何经验,但可能会有所帮助。我同意504是一个超时。。。如果你有一个大文件要传输,而且需要一段时间,我想知道你是否可以一次返回一部分文件。。。在有大型文档的情况下使用类似字节范围的支持。