1

我有一个 .NET 客户端调用 SOAP .asmx Web 服务。我正在开发的客户端本身就是 .NET 4 下的 WCF 服务。目标 .asmx Web 服务是应用程序中的服务引用。我无法控制目的地。

问题在于,在调用 Web 服务时,为调用创建的 XML 不包含正在发送的代理类的序列化 XML 的根元素中的特定命名空间。

相反,它将命名空间应用于嵌套在文档中的少数元素。

使用代理类时:

 var x = new RemoteService_PortTypeClient();
 x.SomeMethod(somePayload);

使用 hl7 命名空间格式化时,目标服务会返回异常:

找不到元素“urn:hl7-org:v3:typeId”的架构信息。

当前序列化的代理对象 ( somePayload) 被发送为:

<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    ....
    <MyNode value="20120801100803" xmlns="urn:hl7-org:v3" /> 

我希望它如何发送:

<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns="urn:hl7-org:v3">
    ....
    <MyNode value="20120801100803"  /> 

如何强制我的客户在根中声明命名空间,而不是分散在元素中?

我知道在根目录中有这个命名空间将被服务接受而不会出错,因为它已被证明可以以这种方式工作。

References.cs或 web.config 或其他中是否有声明/属性来强制执行此操作?

4

1 回答 1

0

我通过创建 Web 引用而不是服务引用解决了我自己的问题。

在此处输入图像描述

于 2013-02-07T16:23:56.650 回答