2009-04-13 6 views
2

私は、cherrypy(http/rest)Webサービスに話しているC#クライアントを持っています。 問題は、圧縮とキャッシュの両方を同時にオンにすることができないことです。上記の行を除外することでHttpWebRequestで圧縮とキャッシュを混在させる方法は?

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

私は正しいキャッシングヘッダを取得します(もし-なし - 数学、変更された場合--以降)、それをコメントアウトしながら、ことは私に圧縮ヘッダを取得します(受け入れ-Encodig:GZIP)ではなくをキャッシングヘッダ。私はバグのようですが、多分私は何か間違っています。

[フルコード]

 public static string GET(string URL) 
    { 
     string JSON; 
     // Create the web request 
     HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest; 
     HttpRequestCachePolicy cPolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Revalidate); 

     request.Accept = "application/json";    
     request.CachePolicy = cPolicy; 
     request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 
     request.Pipelined = false; 

     // Get response 
     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     {     
      // Get the response stream 
      StreamReader readerF = new StreamReader(response.GetResponseStream()); 

      JSON = readerF.ReadToEnd(); 
      // Console application output 
      //Console.WriteLine(JSON); 
      if (response.IsFromCache) 
       Console.WriteLine("Request not from cache"); 
     } 

     return JSON; 
    } 

答えて

2

回避策を実装しました。以下のコードを参照してください。私はキャッシュ処理よりも簡単に圧縮を処理すると判断したので、圧縮部分を自分で実装しました。ブログ投稿にかなり簡単なおかげで:HttpWebRequest and GZip Http Responses;私はまだこれが.netのバグだと思っています。

 public static string GET(string URL) 
    { 
     string JSON; 
     // Create the web request 
     HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest; 
     HttpRequestCachePolicy cPolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Revalidate); 

     request.Accept = "application/json"; 
     request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); 
     request.CachePolicy = cPolicy; 
     request.Pipelined = false; 

     // Get response 
     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     { 
      //From http://www.west-wind.com/WebLog/posts/102969.aspx 
      Stream responseStream = responseStream = response.GetResponseStream(); 
      if (response.ContentEncoding.ToLower().Contains("gzip")) 
       responseStream = new GZipStream(responseStream, CompressionMode.Decompress); 
      else if (response.ContentEncoding.ToLower().Contains("deflate")) 
       responseStream = new DeflateStream(responseStream, CompressionMode.Decompress); 


      // Get the response stream 
      StreamReader readerF = new StreamReader(responseStream); 
      JSON = readerF.ReadToEnd(); 
     } 

     return JSON; 
    } 
0

が、これは政策の副作用ですか? デフォルトポリシーやその他のポリシーを使用している場合はどうなりますか?

その他のオプションは、キャッシュを自分で管理することです。

+0

キャッシュポリシーをデフォルトに設定しました。同じ結果は、圧縮がポリシーを無効にするように設定されているようです。 私は自分自身でキャッシュを実装できることは知っていますが、それは簡単ではありません:-) – AngelBlaZe

関連する問題