如何解决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 举报,一经查实,本站将立刻删除。