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;
}
}
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 方法结构中的一个错误,但没有刷新调用客户端中的服务。