如何处理通过IRequestChannel.Request收到的gzip消息

时间:2010-10-14 11:57:05

标签: wcf compact-framework gzip

我们收到来自WCF调用的消息为GZip数据,但代码期待XML。

我正在使用与WCF Web服务通信的PDA。该服务的响应是使用gzip压缩的SOAP格式。

因为我们在CF3.5中工作,所以我们必须使用NetCFSvcUtil.exe实用程序生成服务客户端代理。

这是CFClientBase中生成错误的部分。

Private Function getReply(ByVal msg As System.ServiceModel.Channels.Message) As System.ServiceModel.Channels.Message
    If (Me.RequestChannelFactory Is Nothing) Then
        'transport doesn't support requests
        Throw New System.NotSupportedException
    End If
    Dim requestChannel As System.ServiceModel.Channels.IRequestChannel
    System.Threading.Monitor.Enter(Me.RequestChannelFactory)
    Try 
        requestChannel = Me.RequestChannelFactory.CreateChannel(Me.remoteAddress)
    Finally
        System.Threading.Monitor.Exit(Me.RequestChannelFactory)
    End Try
    requestChannel.Open
    Try 
        Return requestChannel.Request(msg)  
    Finally
        If (requestChannel.State = System.ServiceModel.CommunicationState.Opened) Then
            requestChannel.Close
        End If
    End Try
End Function

在requestChannel.Request(msg)行上,响应被gzip压缩,但它会引发异常,因为它需要xml。

它正在传来消息:“从网络收到的XML存在问题。有关更多详细信息,请参阅内部异常。”

内部异常:“'',十六进制值0x1F,是无效字符。第1行,第1位。”

我已经没有这方面的想法,非常欢迎任何帮助/建议。

更新:
我放弃了尝试这样做 - 没时间了。
最后,我将绑定更改为basicHTTPBinding,通过Visual Studio添加了Web引用,然后按照GôTô的建议进行了操作。尝试做除WCF和紧凑框架之间最基本的事情之外的任何事情都是如此痛苦。

1 个答案:

答案 0 :(得分:1)

您是否尝试过this solution

  

在客户端,你可以挂钩   该   DataServiceContext.SendingRequest   事件启用AutoDecompress   请求

     

((System.Net.HttpWebRequest)e.Request).AutomaticDecompression   =(System.Net.DecompressionMethods.GZip   |   System.Net.DecompressionMethods.Deflate);