2010-09-20 3 views
0

Я поддерживаю веб-приложение, которое больно обновлять. Это не больно, потому что код плохой, а потому, что есть много устройств, подключенных к этому приложению через Интернет, и получение их для обновления своих клиентов во многом напоминает перемещение бетона.Динамическое отображение различных версий приложения

У меня возникла идея, что я могу просто представить другую версию приложения для разных клиентов. Сеанс хранит информацию о клиенте. Поэтому то, что мне в конечном итоге хотелось бы сделать, это пик на этом сеансе, а затем использовать это, чтобы представить для них «правильную» версию моего приложения.

Физически приложения хранятся таким образом, как, например:

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 \ Компания \ Program \ 2.0.0.0 \ Web \ WebApp \ foo.aspx.

Первоначально я думал об использовании модуля перезаписи IIS, но я действительно не хочу перенаправлять их. Я хочу, чтобы это было без проблем. Любые идеи о том, как это можно реализовать?

обновление:

После дальнейших исследований, я думал, что это было бы умно использовать Global.asax.cs для достижения своей цели. Таким образом, в обработчик событий Application_BeginRequest, я написал следующее:

 string url = Request.Url.ToString(); 

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

Кстати,/искусство/виртуальный каталог, который я привит в этот каталог через IIS. Это было бы похоже на то, как я смогу настроить его на производстве. Во всяком случае, я получаю следующую ошибку, когда я пытаюсь это сделать.

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

Итак, как мне это сделать? Есть ли «разрешенная» стратегия для этого? Выполнение этого через Global.asax.cs было бы идеальным, поскольку я мог бы использовать HTTP-контекст, чтобы «знать», с которым клиент подключается к приложению.

ответ

0

Хорошо, у меня это в основном выяснено. Вот как я это сделал. Я в основном создал родительское приложение, которое будет маршрутизироваться в различные версии. В этом приложении я использую Context.RewritePath, как я сделал выше , за исключением Я добавил ~ перед адресом. Теперь у меня проблемы с viewstate, но я думаю, что я смогу понять это. (Я надеюсь). Я обновлю этот ответ позже, когда в конечном итоге получаю совершенно работоспособное решение.

+0

Хорошо. Это не работает. Базовое приложение не сможет найти двоичные файлы для дочернего приложения. –

Смежные вопросы