动态呈现应用程序的不同版本

时间:2010-09-20 15:37:13

标签: asp.net iis iis-7

我维护一个很难升级的Web应用程序。这并不痛苦,因为代码很糟糕,但是因为有很多设备通过网络连接到这个应用程序并让他们更新客户端就像移动具体一样。

所以我有一个想法,我可以简单地向不同的客户提供不同版本的应用程序。会话存储客户端信息。所以我最终想做的就是在那个会话上达到高峰,然后用它向我们展示我的应用程序的“正确”版本。

在物理上,应用程序的存储方式如下:

C:\ Program Files \ Company \ Program \ Version \ Web \ WebApp

所以你可以看到我可以同时安装多个版本。基本上,如果客户A访问该站点,他们将获得C:\ Program Files \ Company \ Program \ 1.0.0.0 \ Web \ WebApp \ foo.aspx如果客户B访问该站点,他们将看到C:\ Program Files \公司\程序\ 2.0.0.0 \网络\ Web应用程序\ foo.aspx。

我最初想过使用IIS重写模块,但我真的不想重定向它们。我希望这是无缝的。关于如何实施这一点的任何想法?

更新

经过进一步的研究,我认为使用Global.asax.cs来实现我的目标会很聪明。所以在Application_BeginRequest事件处理程序中,我写了以下内容:

        string url = Request.Url.ToString();

        if (url.Contains("MyTest"))
        {
            Context.RewritePath("/art/test.html");
        }

顺便说一句,/ art /是一个虚拟目录,我通过IIS嫁接到这个目录中。这与我在生产中设置它的方式类似。无论如何,当我尝试这个时,我收到以下错误。

The virtual path '/art/test.html' maps to another application, which is not allowed.

那么我该如何做呢?是否有“允许”策略来实现这一目标?通过Global.asax.cs这样做是理想的,因为我可以使用HTTP上下文“知道”哪个客户连接到应用程序。

1 个答案:

答案 0 :(得分:0)

好的,我有很多想通了。这就是我做到的。我基本上创建了一个可以路由到各种版本的父应用程序。在那个应用程序中,我使用Context.RewritePath,就像我在上面所做的那样,除了我在url前面添加了一个〜。现在我遇到了viewstate的问题,但我想我可以从这里弄清楚它。 (我希望)。我最终会得到一个完美的解决方案后,我会更新这个答案。