2010-01-22 121 views
3

我有一個WCF客戶端代理從SOAP Web服務讀取。我不控制服務,只控制客戶端代理。調用服務的一個操作的結果被定義爲非常大的XML模式,其中只有一小部分與我的應用程序相關。防止WCF客戶端反序列化

我創建了一個自定義的WCF行爲,它允許我解析原始XML響應並只讀取相關部分。但是,代理仍然將響應反序列化爲對象圖(由於XML模式而非常複雜)。就我的申請而言,最後一步是多餘的。

是否有可能阻止我的WCF客戶端代理執行反序列化響應的最後一步?

回答

2

你究竟在哪裏處理你想要的消息部分?總的來說,聽起來像你並不真的想要生成默認的客戶端代理,並且用自己的自定義客戶端代理更好。

如果你可以走這條路線,一個可用的選項是簡單地讓代理返回一個Message對象而不是真正的DataContract,然後你可以很容易地從SOAP體中自己讀取原始XML並解析它。比試圖混淆序列化程序,imho更容易。

+0

定製的客戶端代理,似乎是個好主意。如果我要創建我自己的代理,你有什麼指示從哪裏開始? – 2010-01-22 12:36:07

+0

這真的沒什麼難的。基本上像定義服務一樣定義你的契約接口(只要確保所有名稱/命名空間匹配)並添加方法即可。然後創建一個從ClientBase 派生的類(任何svcutil生成的代碼都會給你一個提示,這很容易)。 德米特里如何使用Message類的答案很好,但我會補充說您不需要將它用於輸入和輸出......如果您喜歡,仍可以使用DataContracts作爲請求消息。 – tomasr 2010-01-22 18:19:12

+0

這些是有用的提示,這將使我開始。非常感謝! – 2010-01-25 07:10:22

2

開始與限定客戶端的ServiceContract與操作等

[OperationContract(Action="YourAction", ReplyAction="YourResponseAction")] 
Message YourMethod(Message request) 

然後使用generic ClientFactory實例代理。

您必須手動構建請求消息並使用單向閱讀器解析響應。