Меня попросили предоставить службу WCF, которая позволяет загружать большой блок (потенциально 1 ГБ) порциями в виде смещения byte[]
для использования приложением Silverlight.По сути, операция будет иметь параметр для смещения количества байтов и максимального количества возвращаемых байтов, я думаю, ничего сложного.
Код, который у меня пока есть:
[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 МБ), и оно работает, но мои вопросы: </p>
- Может кто-нибудь предложить улучшения кода?
- Есть лилучший подход с учетом требования?