2

调用 ASP.NET Web API 操作时,我的 AJAX 调用返回 504 错误。

更多信息:

这是我的 API 操作:

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 超时。都没有奏效。

4

1 回答 1

4

HTTP 错误 504 是网关超时

服务器在充当网关或代理时,在尝试完成请求时没有收到来自 URI [...] 指定的上游服务器的及时响应。

我怀疑这意味着在您和生产服务器之间有一个代理或网关,但不是您的开发服务器,这就是为什么它在一个服务器上失败而在另一个服务器上失败的原因。

您的选择是让您的服务器代码足够快以至于它不会触发超时,或者让运行代理服务器的人放宽他们的超时限制(假设它是您或您的公司控制的东西)。

于 2013-05-07T22:25:39.097 回答