1

我很难追踪这个错误。起初我以为是 linq SQL 数据导致了 NRE,因为每次我查看跟踪器日志时,它都会给我 .cs 第 37 行,它指向我的 sql(存储过程)调用。我怀疑这一点的原因是,这个 sproc 的结果是 null(不是 NULL),但是所有字段都没有行返回。我所做的是在上面放数据,现在是挫败感;我仍然得到同样的错误。也许值得一提的是,当我使用 WCF 作为参考(而不是服务参考)时,一个 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;
        }
    }
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 回答