Определить зарегистрированные HttpListeners - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть несколько служб HttpListener, которые используют разные URI (один и тот же порт) на одном компьютере. Есть ли способ для одного процесса определить, какие другие службы работают и зарегистрированы как HttpListeners на той же машине? Все они имеют общий код, подобный следующему:

listener = new HttpListener();
listener.Prefixes.Add("http://+:" + HttpPort + "/" + AppName + "/");
listener.Start();

И я бы хотел, чтобы каждое приложение могло видеть и знать, что другие приложения работают и прослушивают на том же компьютере, и какие URI они используют.

Ответы [ 2 ]

1 голос
/ 08 апреля 2013

Я делаю так (определяю, занят ли порт):

System.Net.IPEndPoint[] tcpListenersArray =
    IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners();
bool portIsBusy = tcpListenersArray.Any(tcp => tcp.Port == port);
return portIsBusy;

У вас есть активная информация о слушателях в массиве tcpListenersArray. И вам не нужны права администратора.

0 голосов
/ 27 февраля 2012

Чтобы показать все зарегистрированные HttpListeners на машине, вы можете выполнить команду netsh http show iplisten , используя класс Process из System.Diagnostics и проанализировать результат:

var process = new Process()
{
    StartInfo = new ProcessStartInfo()
    {
        FileName = "cmd.exe",
        Arguments = "/c netsh http show iplisten",
        CreateNoWindow = true,
        UseShellExecute = false,
        RedirectStandardOutput = true
    }
};
process.Start();

while (!process.StandardOutput.EndOfStream)
{
    string line = process.StandardOutput.ReadLine();
    // here you can parse to obtain the list of listeners
}
...