在Membership.ApplicationName
属性的MSDN page上(适用于asp.net成员资格提供程序),它会警告尽管可以在代码中更改Membership.ApplicationName
,但是ApplicationName属性是对于多次写入而言不是线程安全的,并且更改ApplicationName属性值可能会导致应用程序的多个用户出现意外行为。因此,他们建议避免将其用于“网络应用程序”。
这是因为默认的SqlMembershipProvider
被写为单身。但是我的问题是:如果我的申请流程中的所有主题都将Membership.ApplicationName
设置为相同的东西,那么可以吗?
我正在考虑在我的IIS机器上安装多个应用程序,每个应用程序都有自己独立的应用程序池。我想将它们指向同一位置,但根据主机名,将应用程序提供程序设置为不同的东西。这不是真的可以吗?它可能不是一个线程安全的操作,但是每个应用程序池都没有自己的进程,因此它自己的实例SqlMembershipProvider
?因此,试图为给定Membership.ApplicationName
实例设置SqlMembershipProvider
的每个线程都会尝试将其设置为相同的东西(适合该主机名的提供者)。或者我错过了什么?
我想主要的问题是,所有asp.net应用程序共享一个SqlMembershipProvider
,还是为每个应用程序池进程创建一个单独的应用程序?
答案 0 :(得分:1)
每个应用程序池都有自己的MemberShip.ApplicationName
,因此您可以安全。
关于SQL Membership Provider,同样适用。因为每个站点都在自己的应用程序池中,所以它们是不同的并且是分开的。
实际上即使在相同的应用程序池中,但是你有单独的ASP.NET应用程序(即你在每个文件夹的文件夹上单击创建应用程序),也会有不同的对象。这是因为.NET中的应用程序隔离单元是Application Domain,您可以将其描述为Windows进程中的软进程边界。
要回答评论中的问题,MS ASP.NET快速入门教程中的这个页面可能解释了这一点,并且直接来自马口:
引用:
每个ASP.NET Framework应用程序 Web服务器在a中执行 独特的.NET Framework应用程序 域,保证类 隔离(没有版本控制或命名 冲突),安全沙箱 (阻止访问某些机器 或网络资源)和静态 变量隔离。