【问题标题】:Extraneous wcf body xml namespace declarations无关的 wcf 正文 xml 命名空间声明
【发布时间】:2011-03-19 07:22:27
【问题描述】:

我使用 .Net 3.5 svcutil.exe 工具生成了一组 Web 服务代理对象。肥皂体元素有 2 个无关的 xml 命名空间别名声明。特别是架构和架构实例命名空间(http://www.w3.org/2001/XMLSchemahttp://www.w3.org/2001/XMLSchema-instance)。

由于其他原因,我与之交互的服务存在无法包含这些声明的错误。我试图弄清楚如何删除它们。任何帮助,将不胜感激。肥皂消息看起来像这样。

<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>

【问题讨论】:

    标签: xml wcf .net-3.5 namespaces


    【解决方案1】:

    我找到的解决方案是实现消息检查器。我创建了一个实现 IClientMessageInspector 的类。此类将有机会在消息在线发送之前修改消息,或者在消息离开在线之后修改响应。然后,我创建另一个类 IEndpointBehavior,用于注册自定义消息检查器。最后,我创建了一个扩展 BehaviorExtensionElement 的类,以允许在配置文件中指定自定义行为。

    使用此解决方案,我可以在将消息发送到服务器时对其进行修改,并删除有问题的 xsi 和 xsd 别名定义。

    【讨论】:

      【解决方案2】:

      我认为没有办法做到这一点,除非你自己手写 SOAP 消息。这些只是通常的 XML 模式名称空间,如果不使用它们,真的不应该受到伤害。

      【讨论】:

      • 是的,我正在与服务提供商合作修复他们的代码,但我无法控制。我正在考虑手工制作它,但我将失去 WCF 的所有灵活性、生成的代码和功能,因为我不愿意这样做。
      猜你喜欢
      • 2011-01-27
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多