Как найти пустой порт для запуска WCF web ServiceHost - PullRequest
1 голос
/ 20 марта 2009

Как определить неиспользуемый порт для запуска WCF ServiceHost для размещения локального веб-сервера?

В настоящее время я запускаю службу статически в http://localhost:XXXX, где XXXX - статическое значение в моем коде.

Я бы хотел заменить XXXX на вызов GetUnusedPort () ...

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 22 марта 2009

Лучшее, что я мог найти, это попытка, пока вы не найдете открытый вариант ...

http://forums.devshed.com/net-development-87/c-how-to-determine-if-a-port-is-in-use-371148.html

    public static bool TryPortNumber(int port)
    {
        try
        {

            using (var client = new System.Net.Sockets.TcpClient(new System.Net.IPEndPoint(System.Net.IPAddress.Any, port)))
            {
                return true;
            }
        }
        catch (System.Net.Sockets.SocketException error)
        {
            if (error.SocketErrorCode == System.Net.Sockets.SocketError.AddressAlreadyInUse /* check this is the one you get */ )
                return false;
            /* unexpected error that we DON'T have handling for here */
            throw error;
        }
    }
1 голос
/ 20 марта 2009

Почему бы не позволить пользователю выбрать, на каком порту он хочет разместить службу? Например, добавьте значение в файл конфигурации вашего приложения, которое передается в ServiceHost. Вы также можете попробовать случайным образом сгенерировать номер порта и проверить, открыт ли он, а затем повторить процесс, если его уже использует другое приложение.

...