繁体   English   中英

在WinRT中下载带有发布请求的文件

[英]Downloading a file with a Post request in WinRT

我有WCF服务,我想使用一些参数向其发出发布请求,它将返回一个文件。 服务还可以,我使用curl进行了测试。 该文件约为20 MB。 我知道BackgroundDownloader是为如此大的文件制作的,但它不支持发布请求。

我的代码如下:

var requestBody = "my parameters ...";
var handler = new HttpClientHandler { UseDefaultCredentials = true, AllowAutoRedirect = false };
var client = new HttpClient(handler);         

HttpContent httpContent = new StringContent(requestBody, Encoding.UTF8, "application/json");
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

HttpResponseMessage response = await client.PostAsync("the url...", httpContent);
response.EnsureSuccessStatusCode();
var stream = await response.Content.ReadAsStreamAsync();
///some code to store the stream to a file

问题在于代码bever到达ReadAsStreamAsync部分,由于A task was canceled异常而总是失败。

我使用类似的代码从该服务下载字符串(仅使用ReadAsStringAsync而不是ReadAsStreamAsync ),并且工作正常。

问题是什么? 或执行此操作的正确方法是什么?

您应该重新考虑使用BackgroundDownloader。 即使您的应用暂停,后台下载也会继续。 在WinRT应用程序中,您可以期望暂停始终发生。 强迫用户在下载时保持应用程序运行不是一个好主意。

您可以配置一个WCF服务通过设置接受GET请求serviceMetadata在web.config中或元素WebGetWebInvoke代码属性。 有关使用WebGet属性并返回Stream对象的示例,请检查使用WCF Rest Service的下载文件

关于您的原始问题,您应该创建适当的WCF代理,如使用Windows Store Client App访问WCF服务中所述 除了设置媒体类型之外,Web服务调用还需要大量的标头和主体设置。 代理会为您完成所有这些工作。

只是不要下载文件。

看来问题出在文件大小。 我通过在HttpClient上设置较高的TimeoutMaxResponseContentBufferSize来解决此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM