我使用 .Net 3.5 svcutil.exe 工具生成了一组 Web 服务代理对象。 SOAP 体元素有 2 个无关的 xml 命名空间别名声明。特别是架构和架构实例命名空间( http://www.w3.org/2001/XMLSchema 、 http://www.w3.org/2001/XMLSchema-instance )。
由于其他原因,我正在交互的服务存在无法包含这些声明的错误。我正在尝试找出如何删除它们。任何帮助,将不胜感激。 SOAP 消息看起来像这样。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
...
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
</s:Body>
</s:Envelope>
最佳答案
我找到的解决方案是实现一个消息检查器。我创建了一个实现 IClientMessageInspector 的类。此类将有机会在消息发送之前修改消息,或者在消息发出后修改响应。然后,我创建另一个类 IEndpointBehavior,用它来注册自定义消息检查器。最后,我创建一个扩展BehaviorExtensionElement 的类,以允许在配置文件中指定自定义行为。
通过此解决方案,我可以在消息发送到服务器时对其进行修改,并删除有问题的 xsi 和 xsd 别名定义。
关于xml - 无关的 wcf 主体 xml 命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3304890/