0

Web サービス メソッドを呼び出すと、次のようなエラーが発生します。

GenericException
予期しないエラーが発生しました。値を null にすることはできません。
パラメータ名: 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) の 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 サービスが何も返さないか、それが null になる理由が他にあると想定できます。(デバッグ方法がわからない、リモートサーバーで実行されている..WCFトレースを試みましたが、結果はありません..)

問題は別の国にあり、ビジネスの人々はすべてのWebサービスが機能するはずだと私に言っているので、価格.プレミアムはゼロではないと私に言っています..しかし、デバッグなしでは、彼らと本当に議論することはできません. Web サービスを実行し、ローカル マシンで実行するクライアントを作成する必要がありますか? または、実行中のインスタンスの値を確認する別の可能性はありますか?

また、彼らは Web サービスが変更されていないと言っています - また、私のコードが変更されていないことを 100% 知っています。

(PS 私は指導者が去った後輩です.. ~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 に答える