我正在尝试构建一个可以解析 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 页面时,这会引发错误,我收到以下错误 -
在架构顶层声明的元素不能是无限定的
任何人都可以建议我如何在没有命名空间的情况下解析这些值。请求格式无法更改。
根据我的理解,您的请求中不应该有命名空间,但服务中有。
您可以尝试通过将 MessageHeader 属性的 Namespace 参数设置为空字符串来删除 XML 命名空间,如下所示:
public class Class1
{
[MessageHeader(Namespace = "")]
public string Tag1 { get; set; }
[MessageHeader(Namespace = "")]
public string Tag2 { get; set; }
// other body tag declaration
}