2017-11-22 168 views
5

W moim kontrolerze WEB Api 2 chcę zażądać pliku z jednej strony i zwrócić ten plik z kontrolera. Oto kodBłąd 502 przy przekierowaniu strumienia z innej strony

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

Lokalnie działa dobrze i mogę pobrać plik, ale gdy wdrożyć go do Azure Dostaję 502 Error. Serwer sieci Web otrzymał nieprawidłową odpowiedź, działając jednocześnie jako brama lub serwer proxy.

enter image description here

Logging pokazuje, że nie jest on po powrocie odpowiedzi więc nie ma wyjątków podczas wykonywania metody.

Jest to plik ~ 50 MB. W przypadku mniejszych plików kod działa poprawnie.

Jak sprawić, aby ten kod działał na platformie Azure w przypadku plików o wielkości 50 MB?

+0

Co jeśli czytasz całą odpowiedź (do celów testowych) bez przesyłania strumieniowego w sposób drastyczny? Może czytanie odpowiedzi podczas hostingu na lazurach po prostu nie udaje się z jakiegoś powodu? – Evk

+0

Może to być spowodowane tym, że żądanie trwa długo. Sprawdź [to] (https://docs.microsoft.com/en-gb/azure/app-service/app-service-web-troubleshoot-http-502-http-503) Spróbuj najpierw pobrać mały plik. – Shah

+0

@Shah Wygląda na to, że żądanie nie trwa długo. Cała metoda zajmuje mniej niż sekundę, aby wykonać. –

Odpowiedz

4

Po pierwsze, polecam configuring remote IIS administration dla Twojej aplikacji internetowej Azure, ponieważ umożliwi to bezpośredni dostęp do dzienników usług IIS i związanych z nimi ustawień. Mam silne przeczucie, że problem dotyczy limitów IIS/ASP.NET. Wskazałeś już, że metoda kończy wykonywanie w ciągu kilku sekund, więc prawdopodobnie nie jest to problem z przekroczeniem limitu czasu.

Wspomniałeś również, że kod działa dla mniejszych rozmiarów plików, ale kończy się niepowodzeniem po zwiększeniu rozmiaru. To oznacza, że ​​dla Twojej witryny ustawiono małą wartość (lub domyślną wartość ~ 4 MB) na IIS bufferingLimit. Here to link opisujący, w jaki sposób można zwiększyć ten limit do pożądanej wartości. Mam nadzieję, że to działa dla ciebie. Jeśli tak się nie stanie, polecam zaglądanie do dzienników IIS witryny.

0

Komunikat o błędzie mówi o treści, czy wypróbowałeś inne typy zawartości niż tę, którą otrzymałeś tutaj? receivedResponse.ContentType?

Powiedziałeś we wcześniejszych komentarzach, że błąd pojawia się na Dysku Google i powyżej adresu URL, więc to zależy od zwróconego typu treści.

Ponadto, wracają do strumień nie plik jako całość, jednocześnie określając ContentDisposition być "attachment".

, więc może "audio/mpeg" rozwiąże go lub jakiś inny typ zawartości, który działa z strumieniami.