2009-10-19 58 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() 

只要確保你不會調用任何方法,任何對象的屬性,而不確保他們不爲空。

相關問題