我有一個WCF客戶端代理從SOAP Web服務讀取。我不控制服務,只控制客戶端代理。調用服務的一個操作的結果被定義爲非常大的XML模式,其中只有一小部分與我的應用程序相關。防止WCF客戶端反序列化
我創建了一個自定義的WCF行爲,它允許我解析原始XML響應並只讀取相關部分。但是,代理仍然將響應反序列化爲對象圖(由於XML模式而非常複雜)。就我的申請而言,最後一步是多餘的。
是否有可能阻止我的WCF客戶端代理執行反序列化響應的最後一步?
我有一個WCF客戶端代理從SOAP Web服務讀取。我不控制服務,只控制客戶端代理。調用服務的一個操作的結果被定義爲非常大的XML模式,其中只有一小部分與我的應用程序相關。防止WCF客戶端反序列化
我創建了一個自定義的WCF行爲,它允許我解析原始XML響應並只讀取相關部分。但是,代理仍然將響應反序列化爲對象圖(由於XML模式而非常複雜)。就我的申請而言,最後一步是多餘的。
是否有可能阻止我的WCF客戶端代理執行反序列化響應的最後一步?
你究竟在哪裏處理你想要的消息部分?總的來說,聽起來像你並不真的想要生成默認的客戶端代理,並且用自己的自定義客戶端代理更好。
如果你可以走這條路線,一個可用的選項是簡單地讓代理返回一個Message對象而不是真正的DataContract,然後你可以很容易地從SOAP體中自己讀取原始XML並解析它。比試圖混淆序列化程序,imho更容易。
開始與限定客戶端的ServiceContract與操作等
[OperationContract(Action="YourAction", ReplyAction="YourResponseAction")]
Message YourMethod(Message request)
然後使用generic ClientFactory實例代理。
您必須手動構建請求消息並使用單向閱讀器解析響應。
我已經博客瞭解我最終的確切解決方案。因此,對於completenes:
定製的客戶端代理,似乎是個好主意。如果我要創建我自己的代理,你有什麼指示從哪裏開始? – 2010-01-22 12:36:07
這真的沒什麼難的。基本上像定義服務一樣定義你的契約接口(只要確保所有名稱/命名空間匹配)並添加方法即可。然後創建一個從ClientBase派生的類(任何svcutil生成的代碼都會給你一個提示,這很容易)。 德米特里如何使用Message類的答案很好,但我會補充說您不需要將它用於輸入和輸出......如果您喜歡,仍可以使用DataContracts作爲請求消息。 –
tomasr
2010-01-22 18:19:12
這些是有用的提示,這將使我開始。非常感謝! – 2010-01-25 07:10:22