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 | |
| |
Просмотров: 397 | | |
Всего комментариев: 0 | |