从另一个站点重定向流时出现502错误

Den*_*sky 5 c# azure web asp.net-web-api2 azure-web-app-service

在我的WEB Api 2控制器中,我想从一个站点请求文件并从我的控制器返回该文件.这是代码

public HttpResponseMessage GetLecture()
{            
    HttpWebRequest request = WebRequest.CreateHttp("http://openmedia.yale.edu/cgi-bin/open_yale/media_downloader.cgi?file=/courses/spring11/phil181/mp3/phil181_01_011111.mp3");
    request.Referer = @"http://oyc.yale.edu/courses/";

    var receivedResponse = request.GetResponse();

    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);                    
    response.Content = new StreamContent(receivedResponse.GetResponseStream());
    response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(receivedResponse.ContentType);
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = "phil181_01_011111.mp3";
    response.Content.Headers.ContentLength = receivedResponse.ContentLength;

    return response;
}
Run Code Online (Sandbox Code Playgroud)

本地它工作正常,我可以下载文件,但当我部署到Azure时,我得到502错误.Web服务器在充当网关或代理服务器时收到无效响应.

在此输入图像描述

记录显示它在返回响应后失败,因此在方法执行期间没有异常.

这是~50MB的文件.对于较小的文件代码工作正常.

如何使此代码在Azure上运行50 MB文件?

The*_*mer 4

首先,我建议为 Azure Web App配置远程 IIS 管理,因为这将允许您直接访问 IIS 日志和相关设置。我强烈感觉该问题与 IIS/ASP.NET 限制有关。您已经指出该方法在几秒钟内完成执行,因此这可能不是超时问题。

您还提到该代码适用于较小的文件大小,但当大小增加时会失败。这表明您的网站的IIS bufferingLimit设置为一个较小的值(或者可能是 ~4 MB 的默认值)。以下链接描述了如何将此限制增加到所需的值。希望这对你有用。如果没有,我建议深入研究您网站的 IIS 日志。