无关的wcf body xml名称空间声明

我使用.Net 3.5 svcutil.exe工具生成了一组Web服务代理对象 . soap body元素有2个无关的xml名称空间别名声明 . 特别是架构和架构实例名称空间(http://www.w3.org/2001/XMLSchemahttp://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>

回答(2)

3 years ago

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

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

3 years ago

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