我们收到来自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和紧凑框架之间最基本的事情之外的任何事情都是如此痛苦。
答案 0 :(得分:1)
您是否尝试过this solution:
在客户端,你可以挂钩 该 DataServiceContext.SendingRequest 事件启用AutoDecompress 请求
((System.Net.HttpWebRequest)e.Request).AutomaticDecompression =(System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate);