RESTエンドポイントを公開し、BLOBコンテナーからファイルをフェッチする単純なWCFサービスがあります。サービスはファイルをストリームとして返します。応答が行われた後、ストリームを閉じることについてこの投稿を見つけました:
http://devdump.wordpress.com/2008/12/07/disposed-return-values/
これは私のコードです:
public class FileService
{
     [OperationContract]
     [WebGet(UriTemplate = "{*url}")]
     public Stream ServeHttpRequest(string url)
     {                                
         var fileDir = Path.GetDirectoryName(url);
         var fileName = Path.GetFileName(url);
         var blobName = Path.Combine(fileDir, fileName);
         return getBlob(blobName);                                                                        
     }
     private Stream getBlob(string blobName)
     {
         var account = CloudStorageAccount.FromConfigurationSetting("ConnectingString");
         var client = account.CreateCloudBlobClient();
         var container = client.GetContainerReference("data");
         var blob = container.GetBlobReference(blobName);
         MemoryStream ms = new MemoryStream();           
         blob.DownloadToStream(ms);
         ms.Seek(0, SeekOrigin.Begin);                                   
         return ms;
      }
}
だから私は2つの質問があります:
- 投稿に記載されているパターンに従う必要がありますか?
 - リターンタイプをByte[]に変更した場合、短所/長所は何ですか?
 
(私のクライアントはSilverlight 4.0ですが、何らかの効果がある場合に備えて)