我有 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
问题是代码会到达该ReadAsStreamAsync
部分,它总是会因A task was canceled
异常而失败。
我使用类似的代码从该服务下载字符串(仅使用ReadAsStringAsync
而不是ReadAsStreamAsync
),它工作正常。
问题是什么?或者这样做的正确方法是什么?