0

PayPalIPN方式を実行しようとしています。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行目を参照しているかどうか(存在しないため)、または何を参照しているかはわかりません。

ありがとう

4

2 に答える 2

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

これを行うと、コードのどこで障害が発生しているかを特定するのに役立ちます。

于 2009-10-19T20:57:41.923 に答える
0

コードを見ないと、どこでNullReferenceException起こっているのかわかりません。

stringしかし、自分でIPNを設定した経験があるので、nullオブジェクトを参照している可能性が高いと思います。例えば ​​:

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

nullでないことを確認せずに、オブジェクトのメソッドやプロパティを呼び出さないようにしてください。

于 2009-10-20T01:08:50.537 に答える