无法计算出十进制参数上的“大小无效”

时间:2020-10-20 17:34:26

标签: c# asp.net soap-client

我正在调用一个(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;
            }
        }

1 个答案:

答案 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"/>
相关问题