Я написал пользовательское действие для проекта установщика, которое делает следующее:
- Проверяет существующие веб-сайты, чтобы увидеть, существуют ли какие-либо с тем же именем, которое ввел пользователь.
- Создает веб-сайт в IIS, если он не существует.
- Создает пул приложений.
- Назначает пул приложений созданному веб-сайту.
Когда дело доходит до назначения пула приложений, я получаю ошибку:
Объект конфигурации доступен только для чтения, так как он был зафиксирован вызовом ServerManager.CommitChanges(). Если требуется доступ для записи, используйте ServerManager для получения новой ссылки.
Это сбивает меня с толку, поскольку кажется, что я не могу назначить вновь созданный пул приложений с помощью вызова ServerManager.CommitChanges(). Тем не менее, все остальное работает нормально, используя это, чего я бы не ожидал, если бы это было проблемой.
Вот мой код:
У меня есть экземпляр ServerManager, созданный так:
private ServerManager mgr = new ServerManager();
В моем методе установки я делаю следующее:
Site site = CreateWebsite();
if (site != null)
{
CreateApplicationPool();
AssignAppPool(site);
}
Проверка существующих веб-сайтов — выполняется в методе OnBeforeInstall
private Site CheckWebsites()
{
SiteCollection sites = null;
Site site = null;
try
{
sites = mgr.Sites;
foreach (Site s in sites)
{
if (!string.IsNullOrEmpty(s.Name))
{
if (string.Compare(s.Name, targetSite, true) == 0) site = s;
}
}
}
catch{}
return site;
}
Метод CreateWebSite:
private Site CreateWebsite()
{
Site site = CheckWebsites();
if (site == null)
{
SiteCollection sites = mgr.Sites;
int port;
Int32.TryParse(targetPort, out port);
site = sites.Add(targetSite, targetDirectory, port);
mgr.CommitChanges();
}
else
{
//TO DO - if website already exists edit settings
}
return site;
}
Создать пул приложений
//non-relevant code...
ApplicationPool NewPool = mgr.ApplicationPools.Add(ApplicationPool);
NewPool.AutoStart = true;
NewPool.ManagedRuntimeVersion = "4.0";
NewPool.ManagedPipelineMode = ManagedPipelineMode.Classic;
mgr.CommitChanges();
Назначить пул приложений
private void AssignAppPool(Site site)
{
site.ApplicationDefaults.ApplicationPoolName = ApplicationPool; //ERRORS HERE
mgr.CommitChanges();
}
Я не понимаю, почему сайт может быть создан, пул приложений создан, но затем не назначен. Помощь.