HttpClientでファイルを送信しようとしています。受信側で何かが失敗した場合、同じファイルストリームを再送信します。HttpClientでPostAsyncの後にオブジェクトが破棄される
ストリームを含むMultipartFormDataContentを使用して投稿リクエストを作成しています。 PostAsyncを初めて呼び出すとすべてがうまく見えます。しかし、私は要求を繰り返すために私はSystem.ObjectDisposedExceptionを取得します。
私のファイルストリームは、PostAsyncの最初の呼び出し後に破棄されます...なぜ、私の問題の解決方法はありますか?
これは私が何を話しているのかの基本的な例です。 [コンテンツオブジェクトにLoadIntoBufferAsyncを呼び出す場合
public ActionResult Index()
{
var client = new HttpClient { BaseAddress = new Uri(Request.Url.AbsoluteUri) };
var fi = new FileInfo(@"c:\json.zip");
using (var stream = fi.OpenRead())
{
var content = new MultipartFormDataContent();
var streamContent = new StreamContent(stream);
streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = "\"File\""
};
content.Add(streamContent);
var isSuccess = client.PostAsync("Home/Put", content).
ContinueWith(x => x.Result.Content.ReadAsAsync<JsonResponse>().Result.Success).Result;
//stream is already disposed
if (!isSuccess)
{
isSuccess = client.PostAsync("Home/Put", content).
ContinueWith(x => x.Result.Content.ReadAsAsync<JsonResponse>().Result.Success).Result;
}
}
return View();
}
public JsonResult Put(HttpPostedFileBase file)
{
return Json(new JsonResponse { Success = false });
}
streamContent.CopyToAsyncを使用するか、streamContent.LoadIntoBufferAsyncを呼び出す必要がありますか? – zarkobehar
CopyToAsyncのメソッドは機能しますが、問題はこのストリームのメモリ使用量を2倍にすることです。問題はFileStreamだとは思わない。私はContentStreamとしてMemoryStreamを渡すために批判しましたが、それでも処分されています。私がLoadIntoBufferAsyncを呼び出すと何も変わらない... – zarkobehar