从XMLHTTPPOST请求检索WCF中的内部XML

本文关键字:内部 XML WCF XMLHTTPPOST 请求 检索 | 更新日期: 2023-09-27 18:29:09

大家好,

通过以下主题解决问题后,我可以向WCF发送XMLHTTPPOST请求:在WCF 中处理来自XMLHTTP的POST请求

但现在,我仍在努力寻找从请求中检索内部XML的正确方法。我以XML形式发送请求:

 <?xml version=""1.0"" encoding=""UTF-8"" standalone= ""yes""?><AFISQuery transid=""3356434""><Request CIFNO =""1234567890123456789"" IC= ""770707-07-7777"">TEST</Request></AFISQuery>

在AFISQuery类中,我将其设置为:

[DataContract(Namespace = "")]
public class AFISQuery
{
    public AFISQuery(string transid)
    {
        this.transid = transid;
    }
    [DataMember]        
    public string Request { get; set; }
    [DataMember]
    public string transid { get; set; }
}

因此,我可以获得请求信息("TEST"),但无法获得transid信息。我试着浏览了一下论坛,但没有发现类似的问题。

我的问题是,是否可以从请求的内部XML中检索信息?例如,他们是CIFNo、transid和ICNo。

提前感谢:)

从XMLHTTPPOST请求检索WCF中的内部XML

之所以能够检索Request,是因为Request是一个XML元素。XML元素直接映射到DataMembers,因此,Request被正确地反序列化为AFISQuery数据协定类型上的Request DataMember。

transid的问题在于它是一个属性。DataContractSerializer不支持属性,也不能以任何方式支持它们。您需要更改请求XML,使其将transid作为一个元素,就像request是一个元素一样。

还要注意的是,即使Request现在为您设置了一个值,XML中"Request"元素的属性也会被完全忽略。你可能同意,也可能不同意。

如果您关心属性,或者确实希望支持可序列化成员作为属性,则可能需要从DataContractSerializer切换到XmlSerializer。这很容易做到,只需使用[XmlSerializerFormat.]

装饰您关心的服务或操作(您希望切换到XmlSerializer)