控制WCF XmlSerializer
时间:2020-03-06 14:58:08 来源:igfitidea点击:
我在WCF中实现了一些REST Web服务。我希望这些服务在xml包含无效元素时返回"错误请求"。
XmlSerializer正在处理xml序列化。默认情况下,XmlSerializer会忽略未知元素。我知道可以钩住XmlSerializer.UnknownElement并从此处理程序中引发异常,但是因为这在WCF中,所以我无法控制序列化。关于如何实现此行为的任何想法。
解决方案
也许我们可以返回实现IXmlSerializable的自己的类型,并在ReadXml和WriteXml方法中阻止所需的异常...
这是由于内存不清晰,因为我手头没有全部代码,但是我们可以创建一个自定义Message(类为" 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.UnknownElement并从此处理程序中引发异常,但是因为这在WCF中,所以我无法控制序列化"
实际上有可能做到这一点...
在我从事的WCF项目中,我们使用IDispatchMessageFormatter接口做了类似的事情。
可以在这里找到更多信息http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/
它允许我们在消息头处达到峰值,控制序列化/反序列化,返回状态代码等。