控制WCF XmlSerializer
我在WCF中实现了一些RESTWeb服务。我希望当xml包含无效元素时,这些服务返回“坏请求”控制WCF XmlSerializer,wcf,xml-serialization,Wcf,Xml Serialization,我在WCF中实现了一些RESTWeb服务。我希望当xml包含无效元素时,这些服务返回“坏请求” XmlSerializer正在处理xml序列化。默认情况下,XmlSerializer忽略未知元素。我知道挂接XmlSerializer.UnknowneElement并从此处理程序引发异常是可能的,但因为这是在WCF中,所以我无法控制序列化。任何关于我如何实现这种行为的想法。也许你可以返回你自己的类型,实现IXmlSerializable,并在ReadXml和WriteXml方法中找到你想要的异常…
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接口做了类似的事情
更多信息可以在这里找到
它允许您在消息头、控制序列化/反序列化、返回状态代码等处达到峰值