我的MVC4项目中,我正在使用HttpContext.Current.Session [“ Orgs”],并且为了负载平衡应用程序已部署在两台服务器中,因此该会话存储在SQL Server(allowCustomSqlDatabase)中,有时我得到的是null HttpContext.Current.Session中的异常以及页面刷新/返回错误之后,该异常将消失。 如果将同一应用程序部署在单个服务器中,则HttpContext.Current.Session不会出现任何异常。
我发现解决方案很少,但在那种情况下,会话状态为inproc,谁能帮助我解决此问题。
MVC代码:
public static List<UserOrgViewModel> GetUserOrgs()
{
try
{
if (HttpContext.Current != null)
{
if (HttpContext.Current.Session != null && HttpContext.Current.Session["Roles_Permissions_Routes"] != null && HttpContext.Current.Session["Orgs"] != null)
{
return (List<UserOrgViewModel>)HttpContext.Current.Session["Orgs"];
}
}
}
catch (Exception ex)
{
throw ex;
}
return null;
}
查看:
@{
var orgsl = new List<SelectListItem>();
orgsl.Add(new SelectListItem() { Text = "Select Organization", Value = "" });
var userOrgs = ViewMethods.GetUserOrgs();
if (userOrgs != null && userOrgs.Count > 0)
{
orgsl.AddRange(userOrgs.Select(o => new SelectListItem() { Text = o.OrgName, Value = o.AppId.ToString() }).ToList());
}
var selected = (this.ViewContext.HttpContext.Session["Org_Selected"] != null) ? this.ViewContext.HttpContext.Session["Org_Selected"].ToString() : "";
}
<div style="min-width:285px;">
<select id="OrgId" style="display:none;" onchange="OrgSelectionChanged(this);">
@foreach (var item in orgsl)
{
<option class="Example" value=@item.Value>@item.Text</option>
}
</select>
</div>
Web.config:
<sessionState allowCustomSqlDatabase="true" sqlCommandTimeout="1200" sqlConnectionString="Server=*****;Database=****;Integrated Security=true" timeout="120" />
注意:此问题不是在特定情况下随机出现的。