0

在调用 Web 服务方法时,我收到如下错误:

GenericException
发生意外错误。值不能为空。
参数名称:source at System.Linq.Enumerable.Where[TSource](IEnumerable 1 source, Func2 predicate)
at QuotingGate.CalcsLV.Casco.Standard.Ergo.Calculate(VehicleQuotingParameters parameters, CascoQuote& quote) in c:\Projects\xxx\WebServices\QuotingGate \CalcsLV\Casco\Standard\Ergo.cs:第 152 行
,位于 QuotingGate.CalcsBase.CalculatorBase`4.Quote(In parameters) in c:\Projects\xxx\WebServices\QuotingGate\CalcsBase\Base.cs:第 138 行

上面Ergo.cs line 152有这样的 linq 查询:

var territory = from c in prices.premiums where c.tariffParam3 == "LV" select c;

谷歌搜索并找到很多情况,Single而不是SingleOrDefault.. 但在我的情况下,它的 linq 和中继无关紧要,是否有任何结果,对吧?


价格在这里设置:

 ...
      policyDataKASKORetParam1 prices = null;
     prices = ws.GetCascoQuotesUnregistered(quote,
                            parameters.Vehicle.VIN,
                            parameters.Vehicle.Make,
                            parameters.Vehicle.Model,
                            parameters.Vehicle.ManufactureDate.Value.Year,
                            parameters.Vehicle.Value.Value,
                            parameters.Vehicle.EngineCapacity ?? 0,
                            parameters.Insurance.StartDate.Value,
                            parameters.Insurance.Currency.ToString(), irJaunakLiet, parameters.Client.Code, parameters.Vehicle.OwnerCode, irDefinetieServisi);
        enter code here
    ...

及其调用的方法:

public policyDataKASKORetParam1 GetCascoQuotesUnregistered(CascoQuote quote, string vin, string make, string model, int year, int vehicleValue, int engine, DateTime policyStartDate, string currency, bool irJaunakLiet, string clientCode, string ownerCode, bool irDefinetieServisi)
        {
            policyDataKASKORetParam1 prices;
            string personCode = string.IsNullOrWhiteSpace(Config.FixedOwnerCode) ? clientCode : Config.FixedOwnerCode;

            DateTime start = policyStartDate;
            DateTime issue = DateTime.Today;
            prices = WS.getOfferDataKASKO(SessionKey,
               personCode, // Holder Code
               null,
               null,
               vin,
               make,
               model, // Model
               year, // Year 
               engine, // Engine
               string.Empty, // Usage
               ownerCode, // Person Code
               true,
               false,
               false,
               false,
               false,
               false,
               true,
               false,
               irJaunakLiet,
               false,
               irDefinetieServisi,
               false, // TODO: All risks
               (double)vehicleValue,
               currency,
               issue,
               start,
               null,
               0d,
           null,
               null);
            if (prices.status != 0)
                quote.ErrorList.Add(new QuoteBase.Error(Errors.InsurerError, string.Format("Error message: {0}", prices.statusText)));
            return prices;
        }

基本上最后一个方法调用了 Web 服务方法。所以我可以假设 Web 服务没有返回任何东西,或者是否有其他可能性是它最终为空的原因。(不知道如何调试它,它在远程服务器上运行..尝试了 WCF 跟踪但没有任何结果..)

问题出在另一个国家,商界人士告诉我所有的 Web 服务都应该工作,所以他们说我的价格。溢价不是空的.. 但是没有调试,不能真正与他们争论。我应该做一个客户端来运行 Web 服务并在我的本地机器上运行它吗?或者是否有另一种可能性来查看运行实例的值?

他们还说 Web 服务没有改变——我也知道 100% 我的代码没有改变,一切都像 10 天前一样工作正常。

(PS我是Junior,导师已经离开了..~4个月的经验而已)

4

1 回答 1

2

来自 MSDN,这里是Where 扩展方法的签名:

public static IEnumerable<TSource> Where<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> predicate
)

如您所见,source是与集合对应的参数,您的错误消息指示“参数名称:源”,所以我的猜测prices.premiums是 null。

于 2013-01-04T15:10:15.013 回答