我有一个 .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 或其他中是否有声明/属性来强制执行此操作?