控制WCF XmlSerializer

时间:2008-10-01 09:40:40

标签: wcf xml-serialization

我在WCF中实现了一些REST Web服务。我希望当xml包含无效元素时,使这些服务返回“错误请求”。

xml序列化由XmlSerializer处理。默认情况下,XmlSerializer会忽略未知元素。我知道可以挂钩XmlSerializer.UnknownElement并从此处理程序中抛出异常,但因为这是在WCF中我无法控制序列化。任何想法如何实现这种行为。

3 个答案:

答案 0 :(得分:2)

“我知道可以挂钩XmlSerializer.UnknownElement并从此处理程序中抛出异常,但因为这是在WCF中我无法控制序列化”

实际上可以这样做......

在我工作的WCF项目中,我们使用IDispatchMessageFormatter接口做了类似的事情。

可在此处找到更多信息http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

它允许您在消息标题处达到峰值,控制序列化/反序列化,返回状态代码等。

答案 1 :(得分:1)

也许你可以返回你自己的类型实现IXmlSerializable并在ReadXml和WriteXml方法中抛出你想要的异常......

答案 2 :(得分: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)
    {
        ...
    }

不是一个完整的答案,但可能会让你走上正确的道路。