2009-10-19 8 views
0

J'essaie de faire PayPal méthode IPN. Je pensais que je fais mvc de asp.net je peux juste faire une vue de la méthode dans mon contrôleur comme celui-ciObtenir une erreur de trace et ne comprends pas pourquoi

public void IPN() 
{ 
    // IPN code 
} 

J'ai donc essayé cela sur l'hôte local a fait ma propre formulaire pour publier des trucs variables IPN et a bien fonctionné. Je l'ai téléchargé sur mon serveur et utilisé le simulateur IPN de paypal et il a continué à renvoyer une erreur de serveur 500.

Alors j'ai enlevé tout le code et j'ai eu ce que vous voyez à propos d'une méthode vide dans mon contrôleur. J'ai donc essayé à nouveau le simulateur et il a de nouveau échoué avec une erreur du serveur 500.

Donc je suis allé et tapé réellement dans mon URL à cette méthode de contrôleur et j'obtiens cette trace de pile.

[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 

Je ne sais pas si MyTestController: 2320 est à la ligne 2320 référait (parce qu'il n'existe pas) ou quoi.

Merci

+0

Vous devez envoyer le code pour la méthode IPN() ... sinon nous n'avons aucune idée de ce qui lance l'exception. –

Répondre

2

Ces chiffres sur la droite sont des décalages dans le code compilé, de sorte qu'ils ne pointent pas vers les numéros de ligne de code source.

Ce que je ferais dans ce scénario est de mettre une sorte de journalisation dans le code, de sorte que je puisse savoir où dans le code l'exception est levée. Selon ce que l'accès vous au serveur que vous avez téléchargé le code, vous pourriez être en mesure de créer un fichier journal, ou journal des événements, etc., et utiliser des instructions 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() 

Faire cela vous aidera à repérer où dans le code, l'échec est en train de se produire.

+0

+1. Il n'y a pas de substitut à la (bonne) notation. Pas le type de journalisation tout-tout-le-temps, mais une bonne journalisation ciblée. – griegs

0

Sans voir le code, nous ne pouvons pas être sûr où se passe le NullReferenceException. Mais, ayant l'expérience de la mise en place d'un IPN moi-même, je pense que vous faites très probablement référence à un objet nul . Par exemple:

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() 

Assurez-vous que vous n'êtes pas appeler toutes les méthodes, les propriétés sur un objet sans vous assurer qu'ils ne sont pas nuls.

Questions connexes