Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制WCF XmlSerializer_Wcf_Xml Serialization - Fatal编程技术网

控制WCF XmlSerializer

控制WCF XmlSerializer,wcf,xml-serialization,Wcf,Xml Serialization,我在WCF中实现了一些RESTWeb服务。我希望当xml包含无效元素时,这些服务返回“坏请求” XmlSerializer正在处理xml序列化。默认情况下,XmlSerializer忽略未知元素。我知道挂接XmlSerializer.UnknowneElement并从此处理程序引发异常是可能的,但因为这是在WCF中,所以我无法控制序列化。任何关于我如何实现这种行为的想法。也许你可以返回你自己的类型,实现IXmlSerializable,并在ReadXml和WriteXml方法中找到你想要的异常…

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


XmlSerializer正在处理xml序列化。默认情况下,XmlSerializer忽略未知元素。我知道挂接XmlSerializer.UnknowneElement并从此处理程序引发异常是可能的,但因为这是在WCF中,所以我无法控制序列化。任何关于我如何实现这种行为的想法。

也许你可以返回你自己的类型,实现IXmlSerializable,并在ReadXml和WriteXml方法中找到你想要的异常…

这是来自模糊的内存,因为我手头没有所有的代码,但是你可以创建一个自定义消息(继承类“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)
    {
        ...
    }
这不是一个完整的答案,但可能会使您走上正确的道路。

我知道可以钩住XmlSerializer.UnknowneElement并从此处理程序中引发异常,但因为这是在WCF中,所以我无法控制序列化

这实际上是可能的

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

更多信息可以在这里找到

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