как проверить, используется ли порт в настоящее время с IIS7 (веб-сайт) в коде позади?

Я разработал программу «установщик», которая добавит и настроит новый сайт в IIS. Моя проблема в том, что я хочу проверить, не используется ли порт, указанный пользователем, другим сайтом перед установкой.

Мой проект в стиле C# WinForm. У кого-нибудь есть идея?

string[] lPorts = System.IO.Ports.SerialPort.GetPortNames(); ?

person Mehdi Bugnard    schedule 07.01.2013    source источник
comment
Порты IIS и последовательные порты имеют общее имя порта, но помимо этого нет никакой связи.   -  person Damien_The_Unbeliever    schedule 07.01.2013


Ответы (3)


Проверь это:

Свойство BindingInformation: получает или задает информацию о привязке для текущей привязки.

Значение этого свойства представляет собой строку с разделителями-двоеточиями, которая включает IP-адрес, порт и имя узла привязки. Вы можете оставить имя хоста пустым. Вы можете установить IP-адрес в «*», чтобы указать, что привязка работает для всех переменных.

Например, привязка, заданная для всех IP-адресов на порту 80 и не имеющая указанного имени хоста, возвращает «:80:» из этого свойства. Привязка, установленная для IP-адреса 192.168.1.150 на порту 8080, возвращает «192.168.1.150:8080:». Привязка, заданная для всех IP-адресов на порту 80 для узла с именем «microsoft.com», возвращает «:80:microsoft.com».

Значения свойств BindingInformation хранятся в файле ApplicationHost.config.

Кроме того, вы можете проверить это: Получить привязки IIS во время выполнения

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)
                {
                    //Get the port in use HERE !!!
                    string port = parts[1];
                    yield return new KeyValuePair<string, string>(protocol, port);
                }
            }
        }
person Kapil Khandelwal    schedule 07.01.2013
comment
Большое спасибо !! это отличный ответ ^^ - person Mehdi Bugnard; 07.01.2013

Вы должны посмотреть в Microsoft. Web.Administration пространство имен

Вы должны использовать ServerManager.Sites для получения списка сайтов. Взгляните на коллекцию Bindings на каждом сайте. Каждый сайт может иметь одну или несколько привязок, т.е. доступ к нему может осуществляться через один или несколько адресов/портов.

Ваш код выше ищет физические последовательные порты, которые использовались до USB для подключения модемов и принтеров.

Надеюсь это поможет!

person mortb    schedule 07.01.2013
comment
большое спасибо! Ваш ответ полностью такой же, как и выше, с приведенным примером. Большое спасибо! - person Mehdi Bugnard; 07.01.2013

Не уверен, что вы ищете С#, но если вам нужен powershell, вот вам.

Откройте PowerShell и введите следующее: import-module webadministration get-webbinding

person Pramod Hm    schedule 26.08.2014