Pergunta

Como posso determinar uma porta de un-usado para iniciar um WCF ServiceHost para hospedar um servidor localhost web on?

Atualmente estou começando meu serviço se estaticamente na http: // localhost: XXXX onde XXXX é um valor estático no meu código.

Eu gostaria de substituir o XXXX com uma chamada GetUnusedPort () ...

Qualquer pensamento?

Foi útil?

Solução

Melhor eu poderia encontrar era a tentativa até encontrar uma opção um aberto ...

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;
        }
    }

Outras dicas

Por que não deixar que o usuário escolha qual porta eles querem hospedar o serviço on? Por exemplo, adicionar um valor no arquivo de configuração do seu aplicativo que é passada para o ServiceHost. Você também pode tentar aleatoriamente gerando um número de porta e teste para ver se ele estiver aberto, em seguida, repita o processo se outro aplicativo já está usando-o.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top