Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

502 error when redirecting stream from another site

Tags:

In my WEB Api 2 controller I want to request file from one site and return this file from my controller. Here is the code

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;
}

Locally it works fine and I can download the file but when I deploy it to Azure I'm getting 502 Error. Web server received an invalid response while acting as a gateway or proxy server.

enter image description here

Logging shows that it fails after returning response so no exceptions during method execution.

It's ~50MB file. For smaller files code works fine.

How can I make this code works on Azure for 50 MB files?

like image 223
Denis Palnitsky Avatar asked Nov 22 '17 10:11

Denis Palnitsky


People also ask

Why do I keep getting a 502 error?

A 502 bad gateway message indicates that one server got an invalid response from another. In essence, you've connected with some kind of interim device (like an edge server) that should fetch all of the bits you need to load the page. Something about that process went wrong, and the message indicates the problem.

Is error 502 a DDoS?

3 Verify your server load If your web server reaches its limit, it can't answer any more requests, and the gateway delivers the status code 502 Bad Gateway. The reason could be an unexpectedly high interest in the site or even a DDoS attack.


1 Answers

First off, I will recommend configuring remote IIS administration for your Azure Web App since that will allow you direct access to IIS logs and associated settings. I have a strong feeling that the problem has to do with IIS/ASP.NET limits. You already pointed out that the method completes execution within seconds so this is likely not a timeout problem.

You also mentioned that the code works for smaller file sizes but fails when the size is increased. This points towards IIS bufferingLimit for your website being set to a small value (or perhaps the default value of ~4 MB). Here is a link describing how you can increase this limit to the desired value. Hope this works for you. If it doesn't, I would recommend digging into those IIS logs for your website.

like image 177
ThePretendProgrammer Avatar answered Sep 20 '22 13:09

ThePretendProgrammer