Вопрос

Я пытаюсь использовать метод PayPal IPN.Итак, я подумал, что, поскольку я делаю asp.net mvc, я могу просто создать представление метода в своем контроллере следующим образом.

public void IPN()
{
  // IPN code
}

Итак, я попробовал все это на локальном хосте, создал свою собственную форму для публикации некоторых переменных IPN, и все работало нормально.Я загрузил его на свой сервер и использовал симулятор IPN от PayPal, и он продолжал возвращать ошибку сервера 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 (поскольку она не существует) или к чему-то еще.

Спасибо

Это было полезно?

Решение

Числа справа представляют собой смещения в скомпилированном коде, поэтому они не будут указывать на номера строк исходного кода.

В этом сценарии я бы включил в код какую-то регистрацию, чтобы знать, где в коде возникает исключение.В зависимости от того, какой у вас доступ к серверу, на который вы загрузили код, вы можете создать файл журнала, журнал событий и т. д. и использовать операторы трассировки:

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

Dim o As New Object

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

Call PayPal.GetAccountNumber()

Это поможет вам определить, где в коде происходит сбой.

Другие советы

Не видя кода, мы не можем быть уверены, где находится 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()

Просто убедитесь, что вы не вызываете какие-либо методы и свойства какого-либо объекта, не проверив, что они не равны нулю.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top