BLOB (잠재적으로 1GB)를 청크로 다운로드하여 Silverlight 응용 프로그램에서 사용하기 위해 오프셋 byte[]
으로 사용할 수있는 WCF 서비스를 제공하도록 요청 받았습니다. 본질적으로 연산에는 오프셋 할 바이트 수와 반환 할 최대 바이트 수에 대한 매개 변수가 있습니다. 아무 것도 복잡하지 않습니다.WCF를 사용하여 청녹색 BLOB를 청크로 다운로드
내가 지금까지 가지고있는 코드는 다음과 같습니다
[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;
}
}
내가하고 (상대적으로 작은 파일 < 2MB의에 불구하고)이 테스트 한이 작업을 수행하지만, 내 질문은 :
- 누군가가 수 코드 개선을 제안 하시겠습니까?
- 요구 사항이 더 나은 방법이 있습니까?
앞서 언급했듯이 blob을 스트림이 아닌 byte [] 청크로 반환해야합니다. 아니면 내가 무슨 말을 잘못 이해 했니? – Digbyswift
스트림 대신 바이트 배열로 blob을 소비해야하는 이유는 무엇입니까? –
나는 그렇지 않다. 제 의뢰인이 요청했습니다. 아마도 그들은 이미 이것을 요구하는 해결책을 가지고 있습니다. 나는 단지 동일한 세션에서가 아니라, 부분적으로 얼룩을 다운로드 할 수있는 유연성을 원한다고 가정 할 수 있습니다. – Digbyswift