2009-10-19 59 views
0

我正在尝试执行PayPal IPN方法。所以我想,因为我在做asp.net的MVC我只是做一个方法观在我的控制器这样获取strack跟踪错误,并不明白为什么

public void IPN() 
{ 
    // IPN code 
} 

所以,我想这一切都在本地主机做了我自己的表来发表一些IPN变量东西,它工作得很好。我上传到我的服务器,并使用贝宝的IPN模拟器,并保持返回一个服务器500错误。

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

所以我去了,实际上键入我的网址到该控制器的方法,我得到这个堆栈跟踪。

[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(因为它不存在)或什么。

感谢

+0

您需要发布IPN()方法的代码...否则我们不知道什么是抛出异常。 – 2009-10-19 20:58:29

回答

2

右边这些数字的偏移到编译代码,所以他们不会指向任何的源代码行数。

我在这种情况下做的是将某种日志记录放入代码中,以便我可以知道代码中引发异常的位置。根据您要上传的代码,你也许可以创建日志文件或事件日志等,并使用跟踪报表服务器访问什么:

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

Dim o As New Object 

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

Call PayPal.GetAccountNumber() 

这样做会帮助你发现哪里在代码中失败正在发生。

+0

+1。 (良好的)记录是无可替代的。不是所有的日志类型,但有针对性的日志记录。 – griegs 2009-10-19 21:12:20

0

没有看到代码,我们无法确定NullReferenceException在哪里发生。

但是,有我自己设置IPN的经验,我认为你很可能引用了一个空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() 

只要确保你不会调用任何方法,任何对象的属性,而不确保他们不为空。

相关问题