Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搞不懂;“大小无效”;关于十进制参数_C#_Asp.net_Soap Client - Fatal编程技术网

C# 搞不懂;“大小无效”;关于十进制参数

C# 搞不懂;“大小无效”;关于十进制参数,c#,asp.net,soap-client,C#,Asp.net,Soap Client,我正在调用一个(SOAP)Web服务。如果我使用具有相同值的SOAP-UI工具,则效果良好。然而,当我通过C代码调用时,它给了我这个错误。我在ASP.Net世界里没有一个合适的成长环境 if ( serviceFee > 0 ) { surchargeItemsReq SurchargeItemsReqObject = new attachSurchargeItemsRequest() {

我正在调用一个(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生成的代码中)


@HansKilian评论说要设置指定的布尔标志值。将其设置为true后,它工作了。 谁会想到这一点

if ( serviceFee > 0 )
{
    surchargeItemsRequest SurchargeItemsReqObject = 
        new surchargeItemsRequest()
        {
           provSurcharge = serviceFee,
           provSurchargeSpecified = true
        };
我想知道为什么只有一些字段(bool或decimal类型)会生成这个额外的boolean字段指定属性代码。起初我认为我可以在WSDL-XSD中找到一些东西。还有其他minOccurs=“0”类型的字段也没有生成此类代码

<xs:element minOccurs="0" name="provSurcharge" type="xs:decimal"/>


变量的类型是什么?类型是小数为什么要对同一类型进行取消装箱?请尝试在
AttachResourceItemRequest
@Nonik中将
provSurchargeFieldSpecified
设置为true,因为会出现死机。我试过了。它也不起作用,因为您可以在SOAP服务中定义一些在C#中没有对应类型的类型。在您的例子中,它是一个可为空的十进制数。我不知道为什么编写代理生成器的人决定使用一个单独的布尔指示符,而不是使用
decimal?
。但他们做到了。
<xs:element minOccurs="0" name="provSurcharge" type="xs:decimal"/>