2014-05-14 56 views
0

您好我正在使用GZipStream压缩一个XML文件,并将其上传到一个web服务,这将返回一个gzipstream,我必须下载。我在C#中使用了使用WebClient的以下方法,但它引发异常“WebClient不支持并发I/O操作”。上传文件到webservice和下载文件它返回

byte[] data = Encoding.ASCII.GetBytes(xml); 
        MemoryStream input = new MemoryStream(data); 
        MemoryStream output = new MemoryStream(); 
        GZipStream zip = new GZipStream(output, CompressionMode.Compress); 
        input.WriteTo(zip); 
        byte[] gzipStream = output.ToArray(); 
        //Constructing Request 
        var postClient = new WebClient(); 
        Uri uri = new Uri(url); 
        postClient.UploadDataAsync(uri, gzipStream); 
        var resStream = new GZipStream(postClient.OpenRead(url),CompressionMode.Decompress); 
       var reader = new StreamReader(resStream); 
       var textResponse = reader.ReadToEnd(); 
       return textResponse; 

请帮助我。

+2

魔法门与UploadDataAsync()问题?尝试UploadData() – malkam

+0

您确定需要对执行POST的同一个URI发出GET请求吗?或者您是否想要阅读POST响应? – CodeCaster

+0

将gzip文件发布到Webservice后,服务将处理该文件并返回另一个gzip文件,作为我已下载的响应。 – user3611366

回答

0

在这种情况下,你不应该使用异步

byte[] data = Encoding.ASCII.GetBytes(xml); 
       MemoryStream input = new MemoryStream(data); 
       MemoryStream output = new MemoryStream(); 
       GZipStream zip = new GZipStream(output, CompressionMode.Compress); 
       input.WriteTo(zip); 
       byte[] gzipStream = output.ToArray(); 
       //Constructing Request 
       var postClient = new WebClient(); 
       Uri uri = new Uri(url); 
       postClient.UploadData(uri, gzipStream); 
       var resStream = new GZipStream(postClient.OpenRead(url),CompressionMode.Decompress); 
      var reader = new StreamReader(resStream); 
      var textResponse = reader.ReadToEnd(); 
      return textResponse; 

还是应该等待异步操作(如果你的方法是异步):

byte[] data = Encoding.ASCII.GetBytes(xml); 
       MemoryStream input = new MemoryStream(data); 
       MemoryStream output = new MemoryStream(); 
       GZipStream zip = new GZipStream(output, CompressionMode.Compress); 
       input.WriteTo(zip); 
       byte[] gzipStream = output.ToArray(); 
       //Constructing Request 
       var postClient = new WebClient(); 
       Uri uri = new Uri(url); 
       await postClient.UploadDataAsync(uri, gzipStream); 
       var resStream = new GZipStream(postClient.OpenRead(url),CompressionMode.Decompress); 
      var reader = new StreamReader(resStream); 
      var textResponse = reader.ReadToEnd(); 
      return textResponse;