Главная страница статей --> Хитрости при программировании php, заметки по базам данных

AJAX. Тонкости Web Setup Project

Источник: realcoding.net

На днях столкнулся с достаточно интересной тонкостью при создании 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 можно было успешно применять настройки безопасности.



Похожие статьи:
- Модуль Apache mod_rewrite
- Включите графику!!!
- Фильтры DHTML
- Поиск по сайту - статичный контент (Perl)
- Как подружить интерпретатор Perl с Homesite
- Работа с MS Access в PHP
- История языка HTML
- CSS + RSS = почти идеальный блог?
- Денвер + Ruby On Rails, мануал по установке
- Варианты настройки Ruby On Rails на максимальную производительность: mongrel vs lighttpd vs nginx
- Преимущества индексации страниц с mod_rewrite
- Как узнать сколько раз скачали ваш файл
- Как сгенерировать файл .htaccess


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]