2010-10-14 14 views
0

我們從WCF調用收到GZip數據的消息,但代碼需要XML。如何處理通過IRequestChannel.Request收到的gzip消息

我正在使用與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 

在響應gzip壓縮行requestChannel.Request(MSG),但因爲它期待XML它拋出異常。

消息傳出:「從網絡接收到的XML存在問題,請參閱內部異常以瞭解更多詳細信息。」
內部異常:「'',十六進制值0x1F,是無效字符,第1行,位置1。

我已經用完了這個想法,任何幫助/建議將非常受歡迎。

更新:
我放棄了試圖這樣做 - 跑出時間。
最後,我將綁定改爲basicHTTPBinding,通過Visual Studio添加了Web引用,然後按照GôTô的建議進行。試圖做超出WCF和緊湊框架之間最基本的事情是件很痛苦的事。

回答

1

你試過this solution

在客戶端,你可以在 的 DataServiceContext.SendingRequest 事件掛接對 要求

((System.Net.HttpWebRequest)E啓用AutoDecompress .Request).AutomaticDecompression =(System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate);

+0

感謝您的建議。我已經去了,但我不知道我能怎麼做,自動生成的代碼是使用System.ServiceModel.Channels.Message而不是System.Data.Services.Client.HttpWebRequest? – MLT 2010-10-14 13:07:00