0

いくつかのパラメーターを使用して投稿要求を行いたい WCF サービスがあり、ファイルが返されます。サービスは問題ありません。curl を使用してテストしました。ファイルは約20MBです。このような大きなファイル用に作成されていることは知って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)、正常に動作します。

何が問題ですか?または、これを行う適切な方法は何ですか?

4

2 に答える 2

0

問題はファイルサイズだったようです。高く設定して解決しTimeoutましMaxResponseContentBufferSizeHttpClient

于 2013-07-03T09:32:02.197 に答える
0

You should reconsider the use of BackgroundDownloader. A background download will continue even if your app suspends. In a WinRT application, you can expect suspension to happen all the time. Forcing the user to keep your app running while downloading is not a good idea.

web.config でserviceMetadata要素を設定するか、コードでWebGetまたはWebInvoke属性を設定することにより、GET 要求を受け入れるように WCF サービスを構成できます。WebGet属性を使用して Stream オブジェクトを返す例については、「WCF Rest サービスを使用してファイルをダウンロードする」を参照してください。

元の質問に関しては、Accessing WCF Services with a Windows Store Client App で説明されているように、適切な WCF プロキシを作成する必要があります。Web サービスの呼び出しには、メディア タイプの設定以外にも、多くのヘッダーと本文の設定が必要です。プロキシがすべてを行います。

ファイルをダウンロードするためにそれをしないでください。

于 2013-07-03T08:16:03.997 に答える