2013-01-04 28 views
0

雖然呼叫Web服務方法,我得到的錯誤如下:錯誤在裏面Linq查詢web服務我想

GenericException
時發生意外錯誤。 值不能爲空。
參數名稱:源 在System.Linq.Enumerable.Where [TSource](IEnumerable的1 source, Func 2謂詞)
在QuotingGate.CalcsLV.Casco.Standard.Ergo.Calculate(VehicleQuotingParameters參數,CascoQuote &引號)在C:\項目\ XXX \ Web服務\ QuotingGate \ CalcsLV \卡斯科\標準\ Ergo.cs:線152
在QuotingGate.CalcsBase.CalculatorBase`4.Quote(在參數)在C:\項目\ XXX \ Web服務\ 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服務應該工作所以他們說我的price.premiums不是零..但沒有調試,不能真正與他們爭論。我應該讓客戶端運行Web服務並在本地機器上運行它嗎?或者有沒有另外一種可能性來查看運行實例的值?

此外,他們說,Web服務還沒有改變 - 我也知道100%是我的代碼沒有被改變,以及所有工作得很好像10天前..

(PS我少年誰的導師已經離開..〜只有4個月經驗)

+0

你肯定prices.premiums沒有空? –

回答

2

從MSDN,這裏的Where extension method的簽名:

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

正如你所看到的,source是對應於收集和您的錯誤參數消息指示'參數名字:來源'所以我的猜測是,prices.premiums爲空。