Меня попросили предоставить службу 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 МБ), и это работает, но у меня есть вопросы:
- Может ли кто-нибудь предложить улучшения в коде?
- Есть ли лучший подход с учетом требований?