1

このバグを追跡するのは非常に困難です。最初は、NRE を引き起こしているのは linq SQL データだと思っていました。なぜなら、トレーサー ログを見るたびに、SQL (ストアド プロシージャ) 呼び出しを指す .cs 行 37 が表示されるからです。私がこれを疑う理由は、この sproc の結果は null (NULL ではない) ですが、すべてのフィールドに対して行が返されないためです。私がしたことはそれにデータを置くことでしたが、今はフラストレーションがあります。それでも同じエラーが発生します。WCF を参照 (servicereferences ではなく) DLL として直接ビンに使用すると、クライアント (mywebservice.client) を使用しようとした場合にのみ完全に機能することに言及する価値があるかもしれません。

私が見るべきアイデアはありますか?それはapp.configにありますか?また、コンソール アプリを使用して WCF にアクセスしています。

これは私のコードです:

public static List<usp_GetPaymentsResult> GetScheduledPayment(DateTime DateRun, int Fee)
    {
        try
        {

            PaymentDataContext DBContext = new PaymentDataContext();
            return DBContext.usp_GetPayments(DateRun, Fee).ToList(); //line 37
        }
        catch (SqlException ex)
        {
            throw ex;

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
4

2 に答える 2

2
public static List<usp_GetPaymentsResult> GetScheduledPayment(DateTime DateRun, int Fee)
{
   using(var context = new PaymentDataContext())
   {
       var payments = DBContext.usp_GetPayments(DateRun, Fee);

       if (payments == null)
       {
          // bad database! handle error here
       } 

       return payments.ToList();
   }
}

次の点に注意してください:

  • DBContext はIDisposable. ブロックに入れusingないと、適時に処分されません。

  • 例外処理ブロックは、例外を破棄するだけでした。例外を再スローする場合はthrow;、変数なしで使用します。例外を再スローします。変数 ex を再度使用すると、そのスタックトレースが上書きされ、貴重な情報が失われます。ただし、ブロックは例外を再スローするだけなので、それをキャッチすることはできません。同じ結果です。

  • nullそのような拡張メソッドを呼び出す前に 、結果を確認してください.ToList()

最後に、WCF Web サービスは魔法ではありません。そこにブレークポイントを置いてデバッグできます。問題がある場合は、Web サービスのセットアップ (VS 内部、IIS Express、IIS のいずれか) とプロジェクト構造について詳しく質問することをお勧めします。行番号に基づいてエラーを推測すると、80秒です:)

于 2013-09-24T05:19:46.520 に答える
0

WCF NullReferenceException をデバッグしようとして 30 分間イライラした後、WCF メソッド構造のエラーを修正したが、呼び出し元のクライアントでサービスを更新していないことが判明しました。

于 2015-04-21T12:02:14.650 に答える