2

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

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

4

3 回答 3

2

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

它实际上可以做到这一点......

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

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

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

于 2009-07-01T11:30:34.640 回答
1

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

于 2008-10-02T16:15:28.323 回答
1

这是来自模糊的记忆,因为我手头没有所有代码,但是您可以创建自定义消息(继承“消息”类)类型以在 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)
    {
        ...
    }

不是一个完整的答案,但可能会将您推向正确的道路。

于 2008-10-02T16:31:35.380 回答