HttpTaskAsyncHandler
으로 자체 비동기 HTTP 처리기를 구현하고 비동기 &을 사용하면 완전히 비동기로 유지할 수 있습니다..NET 4.5 비동기와 비동기 적으로 클라이언트에 Azure BLOB 스트리밍
푸른 하늘을 클라이언트에 직접 스트리밍하고 싶습니다. 클라이언트를 blob URL로 리다이렉트하여 직접 다운로드 할 수는 있지만 실제로하고 싶지 않다고 가정 해 봅시다. 예를 들어, 내 BLOB는 비공개입니다.
이 내 현재의 구현 :
코드 :
public async Task<bool> DownloadToStreamAsync(ICloudBlob blob, Stream stream)
{
bool blobFound = true;
IAsyncResult asyncResult = blob.BeginDownloadToStream(stream, null, null);
await Task.Factory.FromAsync(asyncResult, (r) =>
{
try
{
blob.EndDownloadToStream(r);
}
catch (StorageException)
{
blobFound = false;
}
});
return blobFound;
}
사용법 :
public override async Task ProcessRequestAsync(HttpContext context)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccountConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("container1");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blob1.txt");
await DownloadToStreamAsync(blockBlob, context.Response.OutputStream);
}
이 코드가 실제로 완전히 비동기 및 처리하기 위해 내 HTTP 서버를 사용할 수있게됩니다 스트리밍이 진행되는 동안 다른 클라이언트가 있습니까? (즉, 단일 서버 스레드가있는 경우)
모양을 압축 된 상태로 유지하고 (GZIP) 클라이언트가 Content-Encoding: gzip
을 사용하여 수축시킬 수 있습니까?
업데이트 : (저장 2.1.0.0 RC의 등)
비동기 지금 기본적으로 지원.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccountConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("container1");
CloudBlockBlob blockBlob = container.GetBlockBlobReference("blob1.txt");
await blockBlob.DownloadToStreamAsync(context.Response.OutputStream);
WindowsAzure.Storage 2.1.0.0-rc는 이제 async를 기본적으로 지원합니다 - http://www.nuget.org/packages/WindowsAzure.Storage –