微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Wcf 不生成正确的 Xml不包括某些参数

如何解决Wcf 不生成正确的 Xml不包括某些参数

我目前正在开发一个网络服务,它使用 wcf 来序列化和反序列化肥皂消息。但它似乎有配置错误或某种错误。当我尝试生成 Xml 时,它无法正确生成,只是不包含某些参数。我还没有发布整个 xml(我跳过了 Header 和一些正确生成的部分)。

我想生成如下格式的xml:

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CashTransactionQuery xmlns="http://aaim.sungard.com/cashtransaction/service/v1_0">
  <Filter>
    <CashTransaction TradeDate="2020-02-10"  xmlns="http://aaim.sungard.com/cashtransaction/schema/v2011_06_01" />
    <Pf Code="1" SearchMode ="EQ" xmlns="http://aaim.sungard.com/cashtransaction/schema/v2011_06_01" />
  </Filter>
</CashTransactionQuery>

我的 Wcf 类如下所示:

public partial class CashTransacInfoSearchCriteria
{
    
    private SearchMode searchModeField;
    
    
    private System.DateTime TradeDateField;
    
    
    public CashTransacInfoSearchCriteria()
    {
        this.searchModeField = SearchMode.EQ;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    [System.ComponentModel.DefaultValueAttribute(SearchMode.EQ)]
    public SearchMode SearchMode
    {
        get
        {
            return this.searchModeField;
        }
        set
        {
            this.searchModeField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="date")]
    public System.DateTime TradeDate
    {
        get
        {
            return this.TradeDateField;
        }
        set
        {
            this.TradeDateField = value;
        }
    }
    
}

public partial class PortfolioInfoSearchCriteria : SubjectInfoSearchCriteria
{
    
    private SearchMode searchModeField;
    
    private string codeField;
    
    private string nameField;
    
    
    public PortfolioInfoSearchCriteria()
    {
        this.searchModeField = SearchMode.EQ;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    [System.ComponentModel.DefaultValueAttribute(SearchMode.EQ)]
    public SearchMode SearchMode
    {
        get
        {
            return this.searchModeField;
        }
        set
        {
            this.searchModeField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Code
    {
        get
        {
            return this.codeField;
        }
        set
        {
            this.codeField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Name
    {
        get
        {
            return this.nameField;
        }
        set
        {
            this.nameField = value;
        }
    }
   
}

public partial class Filter
{
    
    
    
    private CashTransacInfoSearchCriteria[] cashTransactionField;
    
    private PortfolioInfoSearchCriteria[] pfField;
    
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("CashTransaction",Order=1)]
    public CashTransacInfoSearchCriteria[] CashTransaction
    {
        get
        {
            return this.cashTransactionField;
        }
        set
        {
            this.cashTransactionField = value;
        }
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Pf",Order=2)]
    public PortfolioInfoSearchCriteria[] Pf
    {
        get
        {
            return this.pfField;
        }
        set
        {
            this.pfField = value;
        }
    }

}

public partial class CashTransactionQuery
{
    
    private Filter filterField;
    
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public Filter Filter
    {
        get
        {
            return this.filterField;
        }
        set
        {
            this.filterField = value;
        }
    }
}

我像这样将值传递给 wcf:

public async Task OnGet()
    {
        CashTransactionService_v1_0Client client = new CashTransactionService_v1_0Client();
        client.ClientCredentials.UserName.UserName = "B019438";
        client.ClientCredentials.UserName.Password = "PASSWORD";
        client.Endpoint.EndpointBehaviors.Add(new SigmaLoggerMessageInspector());
        SoapSecurityHeader securityHeader = new SoapSecurityHeader("B019438","PASSWORD");
        PortfolioInfoSearchCriteria[] portfolioInfo = null;
        CashTransacInfoSearchCriteria[] cashInfo = null;

        if (TradeDate.Year != 1)
        {
             cashInfo = new CashTransacInfoSearchCriteria[]
            {
                new CashTransacInfoSearchCriteria(){ID = (int)numberFrom,TradeDate = TradeDate}
            };
        }
        else
        {
            cashInfo = new CashTransacInfoSearchCriteria[]
             {
                new CashTransacInfoSearchCriteria(){ID = (int)numberFrom,TradeDate = DateTime.Today}
             };
        }
        
        if (pfCode != null || pfName != null)
        {
                 portfolioInfo = new PortfolioInfoSearchCriteria[]
            {
                new PortfolioInfoSearchCriteria(){Code = pfCode,Name = pfName,SearchMode=SearchMode.EQ }
            };
        }
        

        Filter filter = new Filter
        {
            Instrument = InstrumentInfo,CashTransaction = cashInfo,Pf = portfolioInfo
        };

        CashTransactionQuery query = new CashTransactionQuery(){ Filter=filter };



        try
        {
            using (new OperationContextScope(client.InnerChannel))
            {
                OperationContext.Current.OutgoingMessageHeaders.Add(securityHeader);
                response = client.CashTransactionQueryAsync(query).GetAwaiter().GetResult();

            }
        }
        catch (Exception e)
        {
            throw e;
        }
    }
}

但是生成的 xml 看起来像这样(不包括 Searchmode 字段和交易日期),我不知道为什么

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CashTransactionQuery xmlns="http://aaim.sungard.com/cashtransaction/service/v1_0">
  <Filter>
    <CashTransaction xmlns="http://aaim.sungard.com/cashtransaction/schema/v2011_06_01" />
    <Pf Code="1" xmlns="http://aaim.sungard.com/cashtransaction/schema/v2011_06_01" />
  </Filter>
</CashTransactionQuery>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。