在没有任何命名空间的情况下解析标头元素

问题描述 投票:0回答:1

我正在尝试构建一个可以解析 XML 请求的 CoreWCF 服务,如下所示 -

<NS1:Envelope
    xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/">
    <NS1:Header>
        <Tag1>Value 1</Tag2>
        <Tag2>Value 2</Tag2>
    </NS1:Header>
    <NS1:Body>
    <!-- Body elements here -->
    </NS1:Body>
</NS1:Envelope>

所以,我宣布了一个与此类似的

MessageContract
-

[MessageContract]
public class Class1
{
    [MessageHeader]
    public string Tag1 { get; set; }
    
    [MessageHeader]
    public string Tag2 { get; set; }
    
    // other body tag declaration
}

但是,当我的服务收到请求时,它无法解析 Tag1 和 Tag2 的值,因为这些标签中的请求中没有给出命名空间。

我尝试将

[XmlElement(Form=XmlSchemaForm.Unqualified)]
设置为如下属性 -

[MessageContract]
public class Class1
{
    [MessageHeader]
    [XmlElement(Form=XmlSchemaForm.Unqualified)]
    public string Tag1 { get; set; }
    
    [MessageHeader]
    [XmlElement(Form=XmlSchemaForm.Unqualified)]
    public string Tag2 { get; set; }
    
    // other body tag declaration
}

但是当我尝试从浏览器访问 WSDL 页面时,这会引发错误,我收到以下错误 -

在架构顶层声明的元素不能是无限定的

任何人都可以建议我如何在没有命名空间的情况下解析这些值。请求格式无法更改。

c# wcf soap corewcf
1个回答
0
投票

根据我的理解,您的请求中不应该有命名空间,但服务中有。

您可以尝试通过将 MessageHeader 属性的 Namespace 参数设置为空字符串来删除 XML 命名空间,如下所示:

public class Class1
 {
   
     [MessageHeader(Namespace = "")]
     public string Tag1 { get; set; }
  
     [MessageHeader(Namespace = "")]
     public string Tag2 { get; set; }

     // other body tag declaration
 }
© www.soinside.com 2019 - 2024. All rights reserved.