2016-12-29 125 views
0

我必须部署到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,因此具有不同的密钥,这就是它正在崩溃的地方。是对的吗?

+1

检查事件查看器中的应用程序日志以获取有关该异常的更多信息。 –

+0

是否这样做,请参阅上面的修改。 – necrofish666

+0

您是否检查过[this](http://stackoverflow.com/questions/25857577/error-occurred-during-a-cryptographic-operation-when-decrypting-forms-cookie)? –

回答

1

您可能会遗漏关于web.config的机器密钥信息,该密钥信息用作对称密钥来执行加密和解密。

要生成IIS中的关键:在MSDN

Go to your application -> Machine Keys -> Generate Keys

更多信息。

+0

我刚刚添加了到这两个应用程序的web.config,根据您之前提供的链接的建议,它没有修复问题。你认为我还应该尝试生成密钥选项吗?这是不是会搞砸这些应用程序?他们现在都部署和生活了,如果办公室在事情出错的时候解决问题,我是唯一一个,而且我只是一个初级开发人员,你可以告诉我,我不是100%我正在做。试图解决一个小问题... – necrofish666

0

对于这个工作,你必须使用两个单独的应用程序池。

SiteB中不允许站点A AD用户条目(这是当您第一次使用站点A你的身份变),反之亦然。这可以通过使用单独的应用程序池来避免:然后您在两个站点上拥有不同的身份。

+0

我会试试这个,谢谢。我会让你知道它是否有效。 – necrofish666

+0

好吧,我认为我在最初的帖子中错了。我刚刚检查过,看起来他们在单独的应用程序池中。有关应用程序日志中的错误,请参阅上面的编辑,我认为这是问题所在。对不起,困惑。 – necrofish666

相关问题