问题描述
我目前正在开发一个网络服务,它使用 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 (将#修改为@)