2013-12-17 62 views
0

我想解码发送到web服务与Content-Type:application/x-gzip的GZipped请求。webservice无法获得gzip请求数据

我已经实现了一个HttpHandler,它添加了一个GZip解压缩过滤器,它似乎正在工作。下面的代码:

void context_BeginRequest(object sender, EventArgs e) 
    { 
     HttpApplication app = sender as HttpApplication; 
     HttpContext ctx = app.Context; 

     if (!ctx.Request.Url.PathAndQuery.ToLower().Contains(".asmx")) 
      return; 

     // test 
     if ("gzip" == ctx.Request.Headers["Content-encoding"]) 
     { 
      app.Request.Filter = new GZipStream(app.Request.Filter, 
       CompressionMode.Decompress); 
     } 

     if (IsEncodingAccepted("gzip")) 
     { 

      app.Response.Filter = new GZipStream(app.Response.Filter, 
     CompressionMode.Compress); 
      SetEncoding("gzip"); 
     } 
     else if (IsEncodingAccepted("deflate")) 
     { 
      app.Response.Filter = new DeflateStream(app.Response.Filter, 
     CompressionMode.Compress); 
      SetEncoding("deflate"); 
     } 
    } 
    private bool IsEncodingAccepted(string encoding) 
    { 
     return HttpContext.Current.Request.Headers["Accept-encoding"] != null && 
      HttpContext.Current.Request.Headers["Accept-encoding"].Contains(encoding); 
    } 
    private void SetEncoding(string encoding) 
    { 
     HttpContext.Current.Response.AppendHeader("Content-encoding", encoding); 
    } 

不幸的是,我不断收到此错误所有的时间:

System.ServiceModel.ProtocolException: Content Type application/x-gzip was not supported by service https://127.0.0.1/ModuloWS.asmx. The client and service bindings may be mismatched. ---> System.Net.WebException: The remote server returned an error: (415) Unsupported Media Type. 

在System.Net.HttpWebRequest.GetResponse() 在System.ServiceModel.Channels.HttpChannelFactory`1 .HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan超时) ---内部异常堆栈跟踪结束---

我一直在这一整天都在破坏我的坚果。

P.S.该请求是使用从MSDN网站上的WCF示例项目中取出的GZipMessageEncoder进行GZip编码的。

回答

1

此错误远在您的代码之前。它在WCF框架级别上弹跳,说你的服务没有被配置为接受内容类型“application/x-gzip”。要解决这个问题,请配置您的WCF以允许所述内容类型。关于如何这样做的信息分散在整个网络中,但是this is a good start。哪里有你从MSDN得到的示例代码也可以有启用gzip的示例配置。

+0

我认为的问题是该服务是一个常规的.NET Web服务,但客户端是一个WCF客户端。我需要找到一种方法来在服务器端(常规的WebService)进行配置...想一想吗? –