Windows Phone 8 デバイスから SkyDrive に大きなファイルをアップロードしようとしています。OurOfMemory 例外を回避するために、ファイル バイトを手動で (SDK なしで) 書き込み、AllowWriteStreamBuffering = false でストリームを要求する必要があります。
var putUrl = string.Format("https://apis.live.net/v5.0/{0}/files/{1}?suppress_response_codes=true&suppress_redirects=true&overwrite=true&access_token={2}", _folderId, fileName, _session.AccessToken);
var webRequest = (HttpWebRequest) WebRequest.Create(putUrl);
webRequest.ContentType = string.Empty;//Empty is required for PUT method.
webRequest.Method = "PUT";
webRequest.AllowWriteStreamBuffering = false;
webRequest.ContentLength = fileStream.Length;
webRequest.BeginGetRequestStream(iar =>
{
using (var requestStream = webRequest.EndGetRequestStream(iar))
{
var buffer = new byte[1024*100];
var read = 0;
while ((read = fileStream.Read(buffer, 0, buffer.Length)) <= buffer.Length)
{
requestStream.Write(buffer, 0, read); //!!!IT HANGS HERE WITHOUT ANY ERROR!!!
if (read < buffer.Length)
break;
}
}
}, webRequest);
小規模および中規模のファイル (<50MB) では問題なく動作しますが、アップロードは requestStream.Write でハングし (さまざまな割合で、30% の場合もあれば 50% の場合もあります)、大きなファイル (100-500 MB) の実行を続行しません。
助けていただければ幸いです。
ありがとう、アレクセイ・ストラフ