After moving my application to production, I get the regular Object reference not set to an instance of an object.
exception logged in my event viewer.
This exception occurs intermittently few times a day, the problem is that I cannot put my hand on the problem, the logged exception details are not helpful, as there are no code line numbers included in the stack trace.
The Exception occurs on an action in my home controller which is the entry point action for each user arriving at the web site.
Can anyone help me reason with the below trace:
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()
Code:
[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);
}