System.NullReferenceException On WCF call

本文关键字:call WCF On NullReferenceException System | 更新日期: 2023-09-27 18:32:26

我在尝试追踪此错误时遇到了很大的困难。起初,我认为是linq SQL数据导致了NRE,因为每次我查看跟踪器日志时,它都会给我.cs的第37行,该行指向我的sql(存储过程)调用。我怀疑的原因是,这个 sproc 的结果是空的(不是空的),但所有字段都没有行返回。我所做的是将数据放在上面,现在沮丧来了;我仍然收到同样的错误。也许值得一提的是,当我使用 WCF 作为引用(而不是服务引用)一个 DLL 直接到 bin 时,它才能完美运行,只有当我尝试使用客户端 (mywebservice.client) 时。

有什么想法我应该在哪里寻找吗?它在应用程序配置上?此外,我正在使用控制台应用程序来访问 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;
        }
    }

System.NullReferenceException On WCF call

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 internal或IIS Express或IIS?)和项目结构的更多详细信息。根据行号猜测错误是如此 80 年代:)

在尝试调试 WCF NullReferenceException 的令人沮丧的 30 分钟后,结果发现我已经更正了 WCF 方法结构中的一个错误,但没有刷新调用客户端中的服务。