1

単純なWebサービスがあり、単一のテキストファイルを返すメソッドを作成したいと思います。私はこのようにしました:

    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シリアル化なしでファイルを返すにはどうすればよいかということです。

4

1 に答える 1

9

Stream代わりにを返すようにメソッドを変更してください。また、コンテンツ全体をbyte[]にダウンロードしてから返すことはお勧めしません。代わりに、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;
}
于 2012-04-11T18:56:41.820 に答える