ブラブ(潜在的に1GB)をオフセットとしてbyte[]
としてダウンロードして、Silverlightアプリケーションで使用できるWCFサービスを提供するよう依頼されました。本質的に、操作には、オフセットするバイト数と返すバイトの最大数のパラメータがあります。何も複雑ではないと思います。WCFを使用してチャンク内のAzureブロブをダウンロードする
私がこれまで持っているコードは次のとおりです。
[OperationContract]
public byte[] Download(String url, int blobOffset, int bufferSize)
{
var blob = new CloudBlob(url);
using(var blobStream = blob.OpenRead())
{
var buffer = new byte[bufferSize];
blobStream.Seek(blobOffset, SeekOrigin.Begin);
int numBytesRead = blobStream.Read(buffer, 0, bufferSize);
if (numBytesRead != bufferSize)
{
var trimmedBuffer = new byte[numBytesRead];
Array.Copy(buffer, trimmedBuffer, numBytesRead);
return trimmedBuffer;
}
return buffer;
}
}
私は(比較的小さなファイル< 2メガバイトとはいえ)これをテストしてきたし、それが作業を行いますが、私の質問は以下のとおりです。
- ことができる人コードの改善を提案しますか?
- 要件を満たした方がよいでしょうか?
前述のとおり、ブロブをストリームではなくバイト[]チャンクで返す必要があります。それとも私はあなたが何を意味するのか誤解しましたか? – Digbyswift
なぜストリームの代わりにバイト配列としてBLOBを消費する必要がありますか? –
私はしません。私のクライアントがこれを要求しました。おそらく彼らはすでにこれを必要とする解決策を用意しています。私は、同じセッションではなく、部分的にブロブをダウンロードする柔軟性が欲しいと思います。 – Digbyswift