AJAX. Тонкости Web Setup Project
На днях столкнулся с достаточно интересной тонкостью при создании web setup project. Задача, в целом, типичная. При инсталляции своего веб-приложения необходимо в IIS настроить для определенных виртуальных путей Anonymous Access. Естественно, как и многим разработчикам, для такой примитивной оперции мне пришлось немало попотеть. Дело в том, что "благодаря" разработчикам, при инсталляции в проекте можно настроить многое, но вот именно настройки безопасности приходится настраивать вручную. По данной тематике можно найти не одну статью, где вам предложат целых 2 способа: через WMI и Active Directory. Наиболее распространённый подход (как мне показалось) это через AD. Делается это примерно так:

создаём Custom Action в виде dll в которой перегружается класс Installer. В нём перегружаем конструктор Installer, где и происходит поиск по AD нужного виртуального пути, а затем выставляются параметры безопасности.

webEntry = new DirectoryEntry(String.Format("IIS://{0}{1}/Root/{2}", hostName, siteName, virtualDir));
               
webEntry.Properties["AuthFlags"].Value = MD_AUTH_ANONYMOUS | MD_AUTH_NT;
               
webEntry.CommitChanges();

где hostName - имя сервера, siteName - сайт на который производится установка (например, для моего сайта по-умолчанию, это /W3SVC/1), virtualDir - это имя виртуальной директории. Далее подцепляем данный Custom Action к проекту инсталляции. Всё вроде бы хорошо, но вот имя сайта, которое возвращает setup project через атрибут TARGETSITE выглядит так: /LM/W3SVC/1 где /LM как я предполагаю обозначает local Machine, и она при поиске в AD указываться не должна. Убил на эту мелочь больше часа.

Однако, это еще не всё. Моя задача осложнилась тем, что мне понадобилось задать анонимность в поддиректории относительно виртуального пути всего приложения. А для того чтобы сделать это, сначала требуется найти соответствующую DirectoryEntry в AD. Пытался это делать 2-мя способами:

* webEntry = new DirectoryEntry(String.Format("IIS://{0}{1}/Root/{2}", hostName, siteName, virtualDir)); с указанием в virtualDir пути в виде parentPath/subPath
* и второй вариант - поиск из головной DirectoryEntry через метод DirectoryEntry.Children.Find

Несмотря на долгие усилия она не находилась, при том что IIS в закладке ASP.NET прекрасно показывал этот путь. Как я понял, в результате оказалось, что при инталляции (с помощью setup project) в инфраструктуре IIS подпапки приложения не регистрируются. Т.е. их IIS не воспринимает как объекты. Поэтому пришлось сначала создавать их:
CODE
childEntry = webEntry.Children.Add("SubPath", "IIsWebDirectory");
webEntry.CommitChanges();

После чего всё заработало на ура и к childEntry можно было успешно применять настройки безопасности.

Источник: http://www.srubil.ru
Категория: Веб-программирование | Добавил: kotenok1343 (04.02.2010)
Просмотров: 397 | Теги: Статьи по Ajax, AJAX | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]