2012-04-11 6 views
1

私は単純なWebサービスを持っており、私は単一のテキストファイルを返すメソッドを作りたいと思います。Windows Azure上で動作するWCFサービスでファイルを返す方法は?

public byte[] GetSampleMethod(string strUserName) 
    { 
     CloudStorageAccount cloudStorageAccount; 
     CloudBlobClient blobClient; 
     CloudBlobContainer blobContainer; 
     BlobContainerPermissions containerPermissions; 
     CloudBlob blob; 
     cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount; 
     blobClient = cloudStorageAccount.CreateCloudBlobClient(); 
     blobContainer = blobClient.GetContainerReference("linkinpark"); 
     blobContainer.CreateIfNotExist(); 
     containerPermissions = new BlobContainerPermissions(); 
     containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob; 
     blobContainer.SetPermissions(containerPermissions); 
     string tmp = strUserName + ".txt"; 
     blob = blobContainer.GetBlobReference(tmp); 
     byte[] result=blob.DownloadByteArray(); 
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Disposition", "attachment; filename="+strUserName + ".txt"); 
     WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain"; 
     WebOperationContext.Current.OutgoingResponse.ContentLength = result.Length; 
     return result; 
    } 

...とサービスのインタフェースから:私はこの方法でやったことを

[OperationContract(Name = "GetSampleMethod")] 
    [WebGet(UriTemplate = "Get/{name}")] 
    byte[] GetSampleMethod(string name); 

そして、それは私にXML応答を含むテストファイルを返します。 質問は、XMLシリアル化なしでファイルを返すにはどうすればいいですか?

+0

サービスに接続してファイルをダウンロードするためにどのクライアントを使用していますか? Visual Studioによって生成されたクライアントは自動的にバイト配列に逆シリアル化されます。 –

+0

ブラウザで動作する必要があります –

+0

ブラウザでファイルを添付ファイルとして保存したり、コンテンツを表示したりしますか? –

答えて

7

代わりにStreamを返すようにメソッドを変更してください。また、それを返す前に、コンテンツ全体をバイト[]にダウンロードしないことをお勧めします。 Blobからストリームを返すだけです。私はあなたのメソッドを適応しようとしましたが、これはフリーハンドコードなので、そのままコンパイルや実行することはできません。

public Stream GetSampleMethod(string strUserName){ 
    //Initialization code here 

    //Begin downloading blob 
    BlobStream bStream = blob.OpenRead(); 

    //Set response headers. Note the blob.Properties collection is not populated until you call OpenRead() 
    WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Disposition", "attachment; filename="+strUserName + ".txt"); 
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain"; 
    WebOperationContext.Current.OutgoingResponse.ContentLength = blob.Properties.Length; 

    return bStream; 
} 
関連する問題