Получить TCP-порт веб-сайт обслуживается на - PullRequest
3 голосов
/ 05 июня 2010

Мне нужно получить порт TCP указанного веб-сайта на IIS 7 и IIS 6 с использованием C #. У меня есть консольное приложение, которое знает имя веб-сайта. Он должен найти порт, на котором обслуживается этот веб-сайт.

Ответы [ 6 ]

4 голосов
/ 05 июня 2010

вы можете получить с переменными сервера Request.ServerVariables [ "SERVER_PORT"]

2 голосов
/ 06 июня 2010

Я думаю, что могу использовать System.DirectoryServices для IIS 6 и Microsoft.Web.Administration для IIS 7.

1 голос
/ 08 января 2013

ДЛЯ IIS 7; -)

private bool checkPortIsOpen(string portNumer)
    {
        ServerManager serverMgr = new ServerManager();

        int index = 0;
        bool isOpen = true;

        foreach (Site mySite in serverMgr.Sites)
        {
            foreach (Microsoft.Web.Administration.ConfigurationElement binding in mySite.GetCollection("bindings"))
            {
                string protocol = (string)binding["protocol"];
                string bindingInfo = (string)binding["bindingInformation"];

                if (protocol.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                {
                    string[] parts = bindingInfo.Split(':');
                    if (parts.Length == 3)
                    {
                        string port = parts[1];
                        if(port.Equals(portNumer.ToString()))
                        {
                            isOpen = false;
                            webSite_portInUse = mySite.Name;
                        }

                    }
                }
                index++;

            }
        }
        return isOpen;
    }
1 голос
/ 05 июня 2010

По умолчанию IIS связывается с портом 80 (порт http по умолчанию), но я уверен, что ответ не так прост.

Возможно, вы могли бы использовать административные сценарии в IIS 6.0 для перебора объектов IIS для поиска номера порта, но это предполагает, что сценарий физически работает на сервере.

Единственным другим вариантом является запуск сканирования каждого порта 65535, чтобы выяснить, может ли прослушиватель html использовать wget.

1 голос
/ 05 июня 2010

OK. Я собираюсь дать вам другой ответ, поскольку вы прокомментировали, что мой последний ответ не был ответом на ваш вопрос.

Попробуйте добавить файл global.asax в приложение asp.net. Он будет иметь функции для обработки различных событий на сервере. Для функции Application_Start у вас может быть некоторый код для сохранения номера порта, на котором работает веб-сайт, в файле или базе данных где-то.

Затем консольное приложение может получить доступ к тому же файлу или базе данных, чтобы найти номер порта.

Если вас это не устраивает, то, возможно, лучше задать вопрос для SO: «Как программно прочитать настройки IIS для веб-сайта во время выполнения?»

0 голосов
/ 02 декабря 2011

Пришлось сегодня выяснить это сам и получить ответ, который я хотел, поэтому решил, что я опубликую его в этой старой теме.

Вы можете определить порт, прочитав метабазу IIS, которая в IIS6и выше - XML-документ.

В IIS6 получите файл systemroot \ system32 \ inetserv \ metaase.xml и посмотрите на узел

/ configuration / MBProperty / IIsWebServer [@ ServerComment = $ имя-сайта] / serverBindings

В IIS7 получите файл systemroot \ system32 \ inetserv \ config \ applicationHost.config (это xml, несмотря на расширение .config) и посмотрите на узел /configuration/system.applicationHost/sites/site[@name='$WebSiteName ']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...