获取堆栈跟踪错误,不明白为什么

时间:2009-10-19 20:52:07

标签: c# .net asp.net-mvc paypal paypal-ipn

我正在尝试使用PayPal IPN方法。所以我想,因为我在做asp.net mvc,我可以在我的控制器中创建一个像这样的方法视图

public void IPN()
{
  // IPN code
}

所以我在本地主机上尝试了这一切,使我自己的形式发布一些IPN变量的东西,它工作正常。我将它上传到我的服务器并使用来自paypal的IPN模拟器并且它仍然返回服务器500错误。

所以我把所有的代码拿出来,基本上你只看到了我控制器中的空方法。所以我再次尝试了模拟器,它再次因服务器500错误而失败。

所以我去了,实际输入了我的url到那个控制器方法,我得到了这个堆栈跟踪。

[NullReferenceException: Object reference not set to an instance of an object.]
   site.com.Controllers.MyTestController.IPN() in MyTestController:2320
   lambda_method(ExecutionScope , ControllerBase , Object[] ) +39
   System.Web.Mvc.<>c__DisplayClass1.<WrapVoidAction>b__0(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
   System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +53
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +258
   System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +193
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +382
   System.Web.Mvc.Controller.ExecuteCore() +123
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +144
   System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +54
   System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

我不确定MyTestController:2320是否引用第2320行(因为它不存在)或者是什么。

由于

2 个答案:

答案 0 :(得分:2)

右侧的数字是编译代码的偏移量,因此它们不会指向任何源代码行号。

在这种情况下我要做的是将某种日志记录放入代码中,以便我可以知道代码中引发异常的位置。根据您对上载代码的服务器的访问权限,您可以创建日志文件或事件日志等,并使用Trace语句:

Trace.WriteLine("Controllers.MyTestController.IPN(): Creating object.")

Dim o As New Object

Trace.WriteLine("Controllers.MyTestController.IPN(): Call PayPal web service.")

Call PayPal.GetAccountNumber()

这样做可以帮助您发现代码中发生故障的位置。

答案 1 :(得分:0)

如果没有看到代码,我们无法确定NullReferenceException发生的位置。

但是,有了自己设置IPN的经验,我认为你很可能引用了一个null string对象。例如:

string foo = Request.Form["bar"];
foo.Trim();
//if the form collection doesn't contain a value for the key "bar" then it'll
//throw a NullReferenceException on foo.Trim()

确保您没有在任何对象上调用任何方法,属性而不确保它们不为空。