2008-10-01 47 views
2

我在WCF中實現了一些REST Web服務。我希望這些服務在xml包含無效元素時返回「Bad Request」。控制WCF XmlSerializer

xml序列化由XmlSerializer處理。默認情況下,XmlSerializer忽略未知元素。我知道可以鉤住XmlSerializer.UnknownElement並從這個處理程序中拋出一個異常,但是因爲這是在WCF中,所以我無法控制序列化。任何想法我可能會實現這種行爲。

回答

2

「我知道這是可能掛鉤XmlSerializer.UnknownElement並從該處理程序拋出一個異常,而是因爲這是WCF我有超過系列化無控制」

它實際上可能做到這一點.. 。

在我工作的WCF項目中,我們使用IDispatchMessageFormatter接口做了類似的事情。

更多信息可以在這裏http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

發現它可以讓你在高峯郵件頭,控制序列化/反序列化,返回狀態碼等

+0

鏈接已經死了。 – 2015-05-06 23:03:37

1

也許你可以返回自己的類型實現IXmlSerializable的投擲攻擊你在的ReadXml和方法中WriteXML想要的例外......

1

這是模糊的記憶,因爲我沒有所有的代碼,以手,但您可以創建一個自定義消息(繼承「Message」類)類型以在您的REST服務中返回並覆蓋某些創建自定義響應的方法。

protected override void OnWriteMessage(XmlDictionaryWriter writer) 
    { 
     ... 
    } 

    protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer) 
    { 
     ... 
    } 

    protected override void OnWriteStartBody(XmlDictionaryWriter writer) 
    { 
     ... 
    } 

    protected override void OnWriteBodyContents(XmlDictionaryWriter writer) 
    { 
     ... 
    } 

不是一個完整的答案,但可能會推動你走向正確的道路。