asp.net-MVC不明原因的生产异常

时间:2015-08-07 03:04:15

标签: asp.net-mvc asp.net-mvc-4

将我的应用程序移至生产环境后,我在事件查看器中记录了常规Object reference not set to an instance of an object.异常。

这种异常每天间歇性地发生几次,问题是我无法解决问题,记录的异常细节没有用,因为堆栈跟踪中没有包含代码行号。

我的家庭控制器中的操作发生异常,这是每个到达网站的用户的入口点操作。

任何人都可以通过以下追踪来帮助我:

ERROR =>  Object reference not set to an instance of an object. 
(XXX.XXX.Web.Controllers.HomeController.Index) 

(
<>c__DisplayClass2b.<BeginInvokeAction>b__1c => 

<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32 => 

<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f =>

 AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d =>

 WrappedAsyncResult`2.CallEndDelegate =>

 AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39 => 

 ControllerActionInvoker.InvokeActionMethod => 

 ReflectedActionDescriptor.Execute => 
 <no type>.lambda_method => HomeController.Index ) 

System.NullReferenceException: Object reference not set to an instance of an object.
   at XXXX.XXXX.Web.Controllers.HomeController.Index()

代码:

[SSOAuthorize]
    public ActionResult Index()
    {
        try
        {

            ViewBag.ShowXXXAccountPrompt = false;
            ViewBag.IsErrored = "false";


            #region "Session Check"
            if (_webHttpContext == null)
            {
                return RedirectToAction("signout", "Federation");
            }
            if (_webHttpContext.Session == null)
            {
                return RedirectToAction("signout", "Federation");
            }
            if (_webHttpContext.Session.PortalUser == null)
            {
                return RedirectToAction("signout", "Federation");
            }
            #endregion 

            if (_webHttpContext.Session.PortalUser != null)
            {
                if (!string.IsNullOrEmpty(_webHttpContext.Session.PortalUser.UserName))
                {
                    var user = _usersManagementService.GetUserByUsername(_webHttpContext.Session.PortalUser.UserName);
                    var latestsubline = _subscriptionLineService.GetLatestLineByUserName(_webHttpContext.Session.PortalUser.UserName);
                    var isDualAccount = latestsubline == null ? false : latestsubline.Action == (int)Entities.SubscriptionLineAction.Activate? latestsubline.IsDualAccount : false;
                    isDualAccount = isDualAccount == null ? false : isDualAccount;
                    if(user == null)
                    {
                        //whenever there is no account Just Create it, the subscriptionLines table is irrelevant
                        _usersManagementService.CreateUser(_webHttpContext.Session.PortalUser.UserName, isDualAccount);
                    }
                    if (user.Status == AccountStatus.Inactive)
                    {
                        //Account Re-Activation Logic
                        if (_usersManagementService.CreateAccountHistory(user))
                         {
                             user.FirstLogonOn = DateTime.Now;
                             user.DeactivatedOn = null;
                             user.Status = AccountStatus.Active;
                             user.IsDualAccount = isDualAccount;
                             _usersManagementService.UpdateAccount(user);

                             #region "Check XXX Dual Account"
                             try
                             {
                                 if (_webHttpContext.Session.MultipleAccountDialogueInformed == false)
                                 {
                                     _webHttpContext.Session.MultipleAccountDialogueInformed = true;

                                     if (user.IsDualAccount == true)
                                     {

                                         ViewBag.ShowXXXAccountPrompt = true;

                                     }
                                     else
                                     {
                                         ViewBag.ShowXXXAccountPrompt = false;
                                     }
                                 }
                             }
                             catch (Exception ex)
                             {
                                 _logger.Log(LogLevel.Error, "XXX Account Service _ " + ex.Message, ex);
                             }
                             #endregion
                         }
                        else
                        {
                            ViewBag.IsErrored = "true";
                            return View(_webHttpContext.Account);
                        }
                    }
                    else
                    {

                        #region "Check XXX Dual Account"
                        try
                        {
                            if (_webHttpContext.Session.MultipleAccountDialogueInformed == false)
                            {
                                _webHttpContext.Session.MultipleAccountDialogueInformed = true;

                                        if (user.IsDualAccount == true)
                                        {

                                            ViewBag.ShowXXXAccountPrompt = true;

                                        }
                                        else
                                        {
                                            ViewBag.ShowXXXAccountPrompt = false;
                                        }
                                }
                         }
                        catch (Exception ex)
                        {
                            _logger.Log(LogLevel.Error, "XXX Account Service _ " + ex.Message, ex);
                        }
                        #endregion
                    }
                    _webHttpContext.BrowserDetails.OperatingSystem = Entities.OperatingSystem.MacinXXXh;

                    _webHttpContext.Session.PortalUser.Id = user.Id;
                    if (_webHttpContext.BrowserDetails.OperatingSystem == Entities.OperatingSystem.Windows)
                    {
                        ViewBag.ProductType = "ZZZ";
                        var YYYInstallsDetails = GetYYYInstallsDetails(0);
                        ViewBag.RemainingInstallCount = YYYInstallsDetails.NumberOfSeatsAvailable;
                        ViewBag.YYYInstallsDetails = YYYInstallsDetails.YYYCustomersLicenseDetailsList;
                        ViewBag.YYYInstallsDetailsCount = YYYInstallsDetails.YYYCustomersLicenseDetailsList.Count;
                        ViewBag.DownloadPageUrl = getDownloadPageUrl(ProductType.ComputerProtectionNT);
                        ViewBag.ProductId = (int)ProductType.ComputerProtectionNT;
                    }
                    else if (_webHttpContext.BrowserDetails.OperatingSystem == Entities.OperatingSystem.MacinXXXh)
                    {
                        ViewBag.ProductType = "MacZZZ";
                        var YYYInstallsDetails = GetYYYInstallsDetails(1);
                        ViewBag.RemainingInstallCount = YYYInstallsDetails.NumberOfSeatsAvailable;
                        ViewBag.YYYInstallsDetails = YYYInstallsDetails.YYYCustomersLicenseDetailsList;
                        ViewBag.YYYInstallsDetailsCount = YYYInstallsDetails.YYYCustomersLicenseDetailsList.Count;
                        ViewBag.DownloadPageUrl = getDownloadPageUrl(ProductType.ComputerProtectionOSX);
                        ViewBag.ProductId = (int)ProductType.ComputerProtectionOSX;
                    }
                    else if (_webHttpContext.BrowserDetails.OperatingSystem == Entities.OperatingSystem.Other)
                    {
                        ViewBag.ProductType = "AndroidZZZ";
                        var YYYInstallsDetails = GetYYYInstallsDetails(2);
                        ViewBag.RemainingInstallCount = YYYInstallsDetails.NumberOfSeatsAvailable;
                        ViewBag.YYYInstallsDetails = YYYInstallsDetails.YYYCustomersLicenseDetailsList;
                        ViewBag.YYYInstallsDetailsCount = YYYInstallsDetails.YYYCustomersLicenseDetailsList.Count;
                        ViewBag.DownloadPageUrl = getDownloadPageUrl(ProductType.ComputerProtectionAndroid);
                        ViewBag.ProductId = (int)ProductType.ComputerProtectionAndroid;
                    }
                    ViewBag.ZZZInstallUrl = PortalConfig.ZZZInstallUrl;
                    ViewBag.ScInstallUrl = PortalConfig.SafeCentralInstallUrl;
                    ViewBag.MacZZZInstallUrl = PortalConfig.MacZZZInstallUrl;
                    ViewBag.TTTTEmail = _webHttpContext.Session.PortalUser.UserName;

                }
                else // if primary username coming back from sso is empty
                {

                    return RedirectToAction("signout", "Federation");
                }
            }
            else // if the portal user is null 
            {


                return RedirectToAction("signout", "Federation");
            }

        }
        catch (Exception ex)
        {
            ViewBag.IsErrored = "true";
            _logger.Log(LogLevel.Error, ex.Message, ex);

        }
        return View(_webHttpContext.Account);
    }

0 个答案:

没有答案