我正在调用一个(SOAP)Web服务。如果我使用具有相同值的SOAP-UI工具,则效果很好。但是,当我通过C#代码调用时,它给了我这个错误。我没有在ASP .Net世界中长大的人。
if ( serviceFee > 0 )
{
surchargeItemsReq SurchargeItemsReqObject = new attachSurchargeItemsRequest()
{
aID = this._applicationId,
tID = token,
provSurcharge = ((decimal)1.8)
};
try
{
this.WriteLog("Invoking Webservice SurchargeItems with ServiceFee");
surchargeItemsResponse SurchargeItemsRespObject = ws.surchargeItems(SurchargeItemsReqObject);
}
十进制变量的值为1.8。当我使用变量本身时,我遇到了同样的问题。所以我从字面上输入了(十进制)1.8。同样的问题。请注意,在SoapUI工具中,按原样输入相同值的请求可以很好地工作。
我得到的例外是这个。
System.Web.Services.Protocols.SoapHeaderException was caught
HResult=-2146233087
Message=provSurcharge size is invalid
Source=System.Web.Services
StackTrace:
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at com.sac.commerce.providers.KanPayService.ServerPaymentPortalService.surchargeItems(surchargeItemsRequest
InnerException:
这是请求对象(在Visual Studio中生成的代码)
public partial class surchargeItemsReq {
private decimal provSurchargeField;
private bool provSurchargeFieldSpecified;
public decimal provSurcharge {
get {
return this.provSurchargeField;
}
set {
this.provSurchargeField = value;
}
}
答案 0 :(得分:0)
@HansKilian评论说要设置provSurchargeSpecified布尔标志值。将其设置为true后,它可以工作。 谁会想到的?
if ( serviceFee > 0 )
{
surchargeItemsRequest SurchargeItemsReqObject =
new surchargeItemsRequest()
{
provSurcharge = serviceFee,
provSurchargeSpecified = true
};
我想知道为什么只有某些字段(布尔型或十进制类型)具有此额外的布尔型字段指定的属性代码生成的。起初我以为我可以在WSDL-XSD中找到某些东西。还有其他minOccurs =“ 0”类型字段也没有生成这种代码。
<xs:element minOccurs="0" name="provSurcharge" type="xs:decimal"/>