我在尝试追踪此错误时遇到了很大困难。起初我以为是导致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;
}
}
答案 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方法结构中的错误,但没有刷新调用客户端中的服务。