我必须部署到IIS Web服务器的两个Web应用程序,他们两人都是
在同一IIS服务器上的同一个应用程序池
,但单独的应用程序池。他们都使用Windows AD组进行身份验证,因此将SiteA用户添加到SiteA AD Group,并将SiteB用户添加到SiteB AD Group,并允许他们访问各自的站点。这些网站没有任何关联,并且完全相互独立。在全球的的Application_Start,他们有这样的:部署C#MVC的Web应用程序运行时错误
站点A
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
log4net.Config.XmlConfigurator.Configure();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var rolesDictionary = ((SiteAMembershipProvider)(Membership.Provider)).InitialisePermissionDictionary();
HttpRuntime.Cache.Insert(
/* key */ "RolesDictionary",
/* value */ rolesDictionary,
/* dependencies */ null,
/* absoluteExpiration */ Cache.NoAbsoluteExpiration,
/* slidingExpiration */ Cache.NoSlidingExpiration,
/* priority */ CacheItemPriority.NotRemovable,
/* onRemoveCallback */ null);
}
网站B
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var rolesDictionary = ((SiteBMembershipProvider)(Membership.Provider)).InitialisePermissionDictionary();
HttpRuntime.Cache.Insert(
/* key */ "RolesDictionary",
/* value */ rolesDictionary,
/* dependencies */ null,
/* absoluteExpiration */ Cache.NoAbsoluteExpiration,
/* slidingExpiration */ Cache.NoSlidingExpiration,
/* priority */ CacheItemPriority.NotRemovable,
/* onRemoveCallback */ null);
}
只有我展示这个原因是因为我怀疑这是在哪里问题在于,但事实上我不知道。
的问题是,这两个网站的工作,因为他们应该独立。因为我在两个AD组中都可以开始任何一个并获得访问权限。问题是,当我在我的浏览器一个网站打开,然后打开其他的,我得到一个运行时错误:
运行时错误
Description: An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.
出现这种情况,无论我先打开哪个网站,所以如果我打开站点A ,它会打开罚款,然后如果我在另一个选项卡中打开SiteB,它将产生SiteB的错误。反之亦然,如果我先打开SiteB,然后打开SiteA,它将为SiteA产生该错误。我可以单独打开一个,但必须关闭浏览器和浏览器的所有实例,才能打开其他浏览器。所以我认为这与缓存无关,但我无法确定。当应用程序启动时,在全局的Application_PostAuthenticateRequest方法中,标识用户,并且如果必要的AD组的一部分,它们的详细信息将被添加到Context.User中。它在两个应用程序中的工作方式完全相同。任何人都知道为什么会发生这种情况?是否这两个应用程序试图保存到Context.User时,都是同时启动?
编辑:
忘了补充,当我在开发环境中同时运行两个,他们都工作。
EDIT2:
安徒生皮门特尔的建议,我检查在事件查看器的应用程序日志,并有以下错误:
Exception information: Exception type: CryptographicException Exception message: Error occurred during a cryptographic operation. at System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func, Byte[] input) at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) at AuditTracker.MvcApplication.Application_PostAuthenticateRequest(Object sender, EventArgs args) at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
所以纠正我,如果我错了,但似乎SiteB正在尝试解密已由SiteA加密的身份验证Cookie,因此具有不同的密钥,这就是它正在崩溃的地方。是对的吗?
检查事件查看器中的应用程序日志以获取有关该异常的更多信息。 –
是否这样做,请参阅上面的修改。 – necrofish666
您是否检查过[this](http://stackoverflow.com/questions/25857577/error-occurred-during-a-cryptographic-operation-when-decrypting-forms-cookie)? –