在我们的asp.net应用程序中,我们有几个虚拟目录。在IIS7中,这些称为“应用程序”,它们都具有相同的应用程序池,以经典管道模式运行。
他们都指向同一个物理目录,例如C:\ webapp。唯一的区别是它们每个都有一个底层的虚拟目录指向一个不同的CSS文件夹,它位于C:\ webapp \ styles \(例如C:\ webapp \ styles \ example1 \ base.css等)
我们使用表单身份验证和内置成员资格提供程序。我们遇到的问题是:
当用户浏览www.webapp.com/example1/page.aspx并点击重定向到www.webapp.com/example2/otherpage.aspx的链接时,用户将被重定向到www.webapp.com /example2/login.aspx。似乎会议已过期。
我们真的不知道在哪里寻找解决方案,任何指针都非常感谢! 提前致谢! 斯泰恩
答案 0 :(得分:1)
我们找到了解决方案,所以我想我会与SO社区分享:
通过反射将AppDomainAppId设置为固定值(在本例中为applicationName):
Globals.asax.cs:
protected void Application_Start(object sender, EventArgs e)
{
// make sure all set the same AppDomainAppId
FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
if (runtimeInfo == null) return;
HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
if (theRuntime == null) return;
FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
if (appNameInfo == null) return;
var appName = (String)appNameInfo.GetValue(theRuntime);
if (appName != "applicationName") appNameInfo.SetValue(theRuntime, "applicationName");
}