2011-12-10 28 views
5

我使用強類型化XSD生成數據類型作爲參數的方法(操作)設置了新的.NET 4.0 WCF服務。這使得客戶端變得乾淨整潔 - 客戶端可以使用強類型,而不必考慮XML。在WCF服務實現中獲取參數的原始XML

但是,在WCF服務的實現中,我更願意將參數數據作爲XML文檔(LINQ XDocument)處理,而不是反序列化的對象類型。 WCF將反序列化爲顯式類型是很好的,但對於我的泛型算法,處理xml文檔更加方便和靈活,主要是因爲傳入的數據是多態的。

我知道我只需要參數對象並將它們序列化回XML,但這看起來很浪費。

我知道我可以用XElement替換強類型的參數以獲得我想要的實現方便性,但這會失去爲客戶端強打字(編譯器檢查,智能感知,自我文檔)的好處。

有什麼辦法可以告訴WCF,在我的服務實現中,我不需要反序列化參數對象,我希望它們是XML嗎?

或者,有沒有辦法訪問參數的原始XML,因爲它們之前的WCF反序列化它們到對象?如果我不能阻止WCF花費時間反序列化對象,至少可以避免將它們重新序列化回XML的成本。

+0

我仍然認爲是真的值得麻煩,爲什麼不加快serailization和deserilazation。 –

+0

@SurjitSamra我不明白你的評論。你是說WCF不值得這麼麻煩,或者我對訪問原始XML的興趣不值得冒險嗎?除了避免不必要的往返之外,我無法對加快序列化或反序列化做任何事情。 – dthorpe

+0

對不起我在我的評論中不清楚我其實是指訪問原始XML值得一提的麻煩? WCF是值得的每一個麻煩:),我最近遷移超過10年的.NET遠程處理分佈式系統在WCF,有沉重的自定義序列化/反序列化,以加快一切,如果你使用某種注射,例如一個marc_s在他的那麼你會發現一切都需要多長時間,在我的情況下,我很高興反序列化只需要<30毫秒。 –

回答

3

要做到這一點的一種方法是創建一個message inspector,它將檢查服務器上的傳入消息並對其執行操作(例如將其存儲或遠程存儲)。

巴勃羅Pialorsi有great blog post on how to write a message inspector,一步一步

檢查的消息將讓您使用這些參數在原始SOAP消息的格式。

我想也許是一個參數檢查器可能是更好的選擇,但它會顯示好像這些檢查器只有在這些參數已被反序列化到對象中時纔會進入任何服務調用的參數,所以不會聽起來像一個可行的方法....

+0

有趣。將調查,謝謝。 – dthorpe