我在azure data lake上传文件。我尝试通过asp.net mvc application下载该文件。我有该文件的adl路径。我可以下载150 MB以下的文件。但我无法下载超过150 MB的文件。超时错误来了。
我的代码在下面......
public ActionResult Download(string adlpath)
{
String header = adlpath;
Console.WriteLine(header);
string[] splitedStr = header.Split('/');
var path = GenerateDownloadPaths(adlpath);
string filename = path["fileName"];
HttpResponseMessage val = DataDownloadFile(path["fileSrcPath"]);
byte[] filedata = val.Content.ReadAsByteArrayAsync().Result;
string contentType = MimeMapping.GetMimeMapping(filename);
var cd = new System.Net.Mime.ContentDisposition
{
FileName = filename,
Inline = true,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(filedata, contentType);
}
public HttpResponseMessage DataDownloadFile(string srcFilePath)
{
string DownloadUrl = "https://{0}.azuredatalakestore.net/webhdfs/v1/{1}?op=OPEN&read=true";
var fullurl = string.Format(DownloadUrl, _datalakeAccountName, srcFilePath);
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accesstoken.access_token);
using (var formData = new MultipartFormDataContent())
{
resp = client.GetAsync(fullurl).Result;
}
}
return resp;
}
答案 0 :(得分:0)
您应修改代码以使用async
和await
。检索文件时您的实现会阻塞,这可能会超时:
public async Task<HttpResponseMessage> DataDownloadFile(string srcFilePath)
{
string DownloadUrl = "https://{0}.azuredatalakestore.net/webhdfs/v1/{1}?op=OPEN&read=true";
var fullurl = string.Format(DownloadUrl, _datalakeAccountName, srcFilePath);
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _accesstoken.access_token);
using (var formData = new MultipartFormDataContent())
{
resp = await client.GetAsync(fullurl);
}
}
return resp;
}
方法的返回值更改为Task<HttpResponseMessage>
,并添加async
修饰符。
通过检索client.GetAsync
属性,调用await
已更改为使用Result
而非阻止。
您的代码可能仍会超时。我相信对请求在中止之前可以花多长时间有一个可配置的限制,如果你仍然有超时,你应该调查一下。
答案 1 :(得分:0)
根据我的理解,您可以尝试为HttpClient
实例增加HttpClient.Timeout(默认为100秒)。
HttpClient.Timeout
获取或设置在请求超时之前等待的时间跨度。
默认值为100,000毫秒(100秒)。
此外,如果您通过Azure Web App托管应用程序,则Azure Load Balancer可能会遇到4分钟的空闲超时设置。您可以更改Azure VM和Azure Cloud Service中的空闲超时设置。您可以关注的详细信息here。