Я создал приложение, которое получает все мои сайты в IIS и проверяет каждый URL в привязках, если есть ошибка HTTP и если обнаружена определенная ошибка, мое приложение сбросит экземпляр сайта IIS в IIS, однаконедостаточно, чтобы исправить ошибку, как следует. Мне нужно будет сбросить и сайт, и пул приложений, к которому он принадлежит.
Есть ли способ получить объект пула приложений на основе объекта сайта?
Я попробовал приведенный ниже код, но это работает только в том случае, если в пуле приложений есть только 1 сайт / приложение. Проблема в том, что я не получаю соответствующий пул приложений сайта, если у меня есть несоответствие числа между списком сайтов и списком приложений, так как 1 AppPool может иметь несколько сайтов / приложений.
ServerManager serverMgr = new ServerManager();
SiteCollection sites;
ApplicationPoolCollection appPools;
public List<(Site, ApplicationPool, string)> getSiteInfo()
{
List<(Site, ApplicationPool, string)> siteInfo = new List<(Site, ApplicationPool, string)>();
List<string> siteUrls = new List<string>();
sites = serverMgr.Sites;
appPools = serverMgr.ApplicationPools;
foreach (Site site in sites)
{
foreach (ApplicationPool appPool in appPools)
{
foreach (Binding binding in site.Bindings)//getting site url
{
string bindingInfo = binding.BindingInformation; // "192.111.1.1:80:google.com" /// *:808:
string[] adrs = bindingInfo.Split(':'); //0 = ip, 1 = port, 2 = hostname
if (adrs[0] == "*")
{
adrs[0] = "localhost";
}
//adding to my list of sites and it's corresponding Application Pool in 1 tuple variable
siteInfo.Add((site, appPool, adrs[0] + ":" + adrs[1] + "/" + adrs[2])); //localhost:80/google.com
}
}
}
return siteInfo;
}
Мне нужно что-то похожее на этот код: (см. Комментарии)
public List<(Site, ApplicationPool, string)> getSiteInfo()
{
List<(Site, ApplicationPool, string)> siteInfo = new List<(Site, ApplicationPool, string)>();
List<string> siteUrls = new List<string>();
sites = serverMgr.Sites;
foreach (Site site in sites)
{
foreach (Binding binding in site.Bindings)
{
//I need something like this to make sure the AppPool I'm getting is of the Site I have.
ApplicationPool appPool = site.ApplicationPoolName;//<-- This Line
string bindingInfo = binding.BindingInformation;
string[] adrs = bindingInfo.Split(':');
if (adrs[0] == "*")
{
adrs[0] = "localhost";
}
//So that I can do this when passing the Site Info tuple Variable with the Site Object together with the corresponding AppPool for later use of the IISReset Class in my project.
siteInfo.Add((site, appPool, adrs[0] + ":" + adrs[1] + "/" + adrs[2]));
}
}
return siteInfo;
}
Извините за длинное и неаккуратное объяснение, но я был бы рад выяснить, если у вас есть вопросы сэто. Спасибо.