Как вы можете получить название веб-приложения на веб-сайте?

Я хочу иметь возможность проверить, существует ли приложение на существующем веб-сайте, но я ничего не нашел. На данный момент у меня есть проект установщика, который получает от пользователя ввод имени существующего веб-сайта. Я использую это, чтобы проверить, что сайт в настоящее время существует в IIS, и если да, то я хочу выполнить поиск в существующих приложениях, чтобы увидеть, существует ли конкретный 1. Вот что у меня есть:

private void CheckWebsiteApps()
{
    SiteCollection sites = null;

    try
    {
        //Check website exists
        sites = mgr.Sites;
        foreach (Site s in sites)
        {
            if (!string.IsNullOrEmpty(s.Name))
            {
                if (string.Compare(s.Name, "mysite", true) == 0)
                {
                    //Check if my app exists in the website
                    ApplicationCollection apps = s.Applications;
                    foreach (Microsoft.Web.Administration.Application app in apps)
                    {
                        //Want to do this
                        //if (app.Name == "MyApp")
                        //{ 
                        //    Do Something
                        //}
                    }
                }
            }
        }
    }
    catch
    {
        throw new InstallException("Can't determine if site already exists.");
    }
}

Очевидно, app.Name не существует, так что я могу сделать, чтобы получить это?

1 ответ

Решение

Для этого можно использовать API-интерфейсы Microsoft.Web.Administration и Microsoft.Web.Management для IIS. Их нет в GAC, вы должны ссылаться на них из папки inetsrv. На моей машине они расположены в...

  1. C: \ Windows \ System32 \ Inetsrv \ Microsoft.Web.Administration.dll
  2. C: \ Windows \ System32 \ Inetsrv\Microsoft.Web.Management.dll

Вот пример кода перечисления их,

class Program
{
    static void Main(string[] args)
    {
        ServerManager serverManager = new ServerManager();
        foreach (var site in serverManager.Sites)
        {
            Console.WriteLine("Site -> " + site.Name);
            foreach (var application in site.Applications)
            {
                Console.WriteLine("  Application-> " + application.Path);
            }
        }


        Console.WriteLine("Press any key...");
        Console.ReadKey(true);
    }
}

Следовать за:

Приложения не имеют имен, только корневой сайт имеет имя в IIS. Приложения имеют только путь (так как они являются дочерними элементами сайтов). Если путь - "/", то приложение является корневым приложением для сайта. Если путь отличается от /, то это 2-е + дочернее приложение сайта. Таким образом, вам нужно будет использовать Application.Path, чтобы делать то, что вы хотите.

Другие вопросы по тегам