IIS7在虚拟目录之间重定向

时间:2011-04-21 09:58:28

标签: asp.net session iis-7 virtual-directory

在我们的asp.net应用程序中,我们有几个虚拟目录。在IIS7中,这些称为“应用程序”,它们都具有相同的应用程序池,以经典管道模式运行。

  • www.webapp.com/example1
  • www.webapp.com/example2

他们都指向同一个物理目录,例如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。似乎会议已过期。

我们真的不知道在哪里寻找解决方案,任何指针都非常感谢! 提前致谢! 斯泰恩

1 个答案:

答案 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");
    }