代码之家  ›  专栏  ›  技术社区  ›  Nic Strong

控制WCF XmlSerializer

  •  2
  • Nic Strong  · 技术社区  · 16 年前

    我在WCF中实现了一些RESTWeb服务。当XML包含无效元素时,我希望让这些服务返回“坏请求”。

    XML序列化正在由XmlSerializer处理。默认情况下,XmlSerializer忽略未知元素。我知道可以挂接xmlserializer.unknownelement并从该处理程序中引发异常,但因为这在wcf中,所以我无法控制序列化。我可以如何实现这种行为。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Prashanth    15 年前

    我知道可以挂接xmlserializer.unknownelement并从该处理程序中引发异常,但因为这在wcf中,所以我无法控制序列化。

    实际上可以这样做…

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

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

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

        2
  •  1
  •   sebagomez    16 年前

    也许您可以返回自己的类型,实现IXMLSerializable并thorw在readXML和writeXML方法中所需的异常…

        3
  •  1
  •   DavidWhitney    16 年前

    这来自于模糊的内存,因为我没有足够的代码来处理,但是您可以创建一个自定义消息(继承类“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)
        {
            ...
        }
    

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