【问题标题】:Exception occurs outside function only when deployed outside debug environment仅当部署在调试环境之外时才会在函数外发生异常
【发布时间】:2013-10-20 11:29:12
【问题描述】:

我正在使用ASP.Net MVC 3 为我的公司创建单点登录提供程序。在我开始部署到服务器之前,一切都运行良好。我部署到的每个生产服务器,都会出现这个Exception

    [NullReferenceException: Object reference not set to an instance of an object.]
   UniQ.SSO.Controllers.LoginController.Index(String requestToken, String callbackUrl) +89
   lambda_method(Closure , ControllerBase , Object[] ) +178
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +263
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +38
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +123
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +727142
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +727142
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +309
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +727076
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +334
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +15
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +52
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

我尝试了各种不同的东西。我尝试使用项目复制所有本地依赖项或部署到不同的服务器。在那之后我尝试了远程调试,但它只是停在function 声明并告诉此时发生了异常。

public ActionResult Index(string requestToken, string trustid, string challenge, string callbackUrl)

到目前为止,Google 也没有提供太多帮助,所以有人知道发生了什么或我做错了什么吗?

【问题讨论】:

  • 您需要包含该方法的代码。错误发生在第 89 行,那么那里的代码是什么。
  • 如果没有所有可用信息,就很难准确判断。看起来在 LoginController.Index 中有一些东西访问了一个导致抛出这个异常的空变量。还要检查 requestToken、callbackUrl 传递的值。
  • @JohnKoerner 这不对。 +89 指的是 IL 代码偏移量,而不是实际的行号。在堆栈跟踪中,LoginController.cs:89 将引用 LoginController.cs 文件中的第 89 行。这是因为“已编译”的 .net 程序集中没有原始源文件。
  • @Raj 函数内没有发生异常。我知道这一点是因为我将函数中的代码包装在 try ... catch 中,它会在发生时以文本格式输出异常详细信息。虽然我仍然得到解释异常的运行时错误页面,而不是打印出异常。
  • @Feanaro 你是对的,我看错了。

标签: c# asp.net asp.net-mvc-3 exception entity-framework-5


【解决方案1】:

cmets 给了我将调试符号上传到服务器的想法。这实际上在运行时错误页面上给了我一个文件和行号,并帮助我解决了我的问题。

感谢@JohnKoerner 和@Raj 启发了这个想法!

问题源于我制作的HTTPModule,它应该做的一件事就是初始化环境。不知何故,模块没有被实例化。由于它没有执行任何操作,因此环境变得不完整且不稳定,因此在稍后的执行过程中起源于 NullReferenceException

我只需要在web.config 文件的System.WebServer 命名空间中注册HTTPModule。这与应用程序池上的托管管道设置有关。当您将其设置为 integrated 时,您还需要在 System.WebServer 命名空间中注册您的 HTTPModule。之后问题得到解决,SSO 平台现已启动并运行。

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add type="UniQ.SSO.Module.OAuthAuthenticationModule" name="OAuthAuthentication"/>
    </modules>
  </system.webServer> 

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2013-04-17
    • 2018-04-02
    • 2020-12-01
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多