System.NullReferenceException在WCF调用上

时间:2013-09-24 00:17:32

标签: c# wcf

我在尝试追踪此错误时遇到了很大困难。起初我以为是导致NRE的linq SQL数据,因为每次查看跟踪器日志时,它都会给我.cs第37行指向我的sql(存储过程)调用。我怀疑这个的原因,这个sproc的结果是null(不是NULL)但是没有所有字段的行返回。我所做的就是把数据放在上面,现在却让人感到沮丧;我仍然得到同样的错误。也许值得一提的是,当我使用WCF作为引用(而不是servicereferences)时,一个DLL直接进入bin然后它工作完美,只有当我尝试使用客户端(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;
        }
    }

2 个答案:

答案 0 :(得分: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 Webservices并不神奇。您可以在那里放置断点并进行调试。如果您遇到这样的问题,或许最好通过有关您的Web服务设置(VS内部或IIS Express或IIS?)和项目结构的更多详细信息来询问有关该问题的问题。根据行号猜测错误是80秒:)

答案 1 :(得分:0)

在尝试调试WCF NullReferenceException的30分钟令人沮丧之后,原来我纠正了WCF方法结构中的错误,但没有刷新调用客户端中的服务。