Как получить локальный порт, на котором работает моя служба WCF? - PullRequest
2 голосов
/ 12 августа 2010

Я использую несколько автономных служб WCF на одном компьютере. Мне нужно открыть каждый из них на отдельном порту (очевидно), поэтому я использовал «net: tcp: // localhost: 0» в качестве адреса, поскольку я полагал, что таким образом будет назначен свободный порт.

Теперь мне нужно знать, какой порт был назначен на самом деле. Этот код запускается на сервере, поэтому мне нужен порт local . Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

Вы можете использовать OperationContext.Channel.LocalAddress.Uri.Port, чтобы узнать порт, используемый при звонке на услугу

0 голосов
/ 12 августа 2010

Нашел что-то, что работает, хотя это немного грязно.Вместо автоматического назначения порта явно запрашивается свободный порт и используется для создания службы:

Address = "net.tcp://localhost:" + FindFreeTcpPort ();

private static int FindFreeTcpPort ()
{
    TcpListener l = new TcpListener (IPAddress.Parse ("127.0.0.1"), 0);
    l.Start ();
    int port = ((IPEndPoint) l.LocalEndpoint).Port;
    l.Stop ();
    return port;
}

(код метода от здесь )

0 голосов
/ 12 августа 2010

Затем вам нужно другое место для хранения всех портов службы для чтения их извне сервера. Если это другой сервис, то ему нужен постоянный порт. Это также может быть XML-файл через http или что-то измененное при каждом запуске службы.

Подробнее о WCF Discovery

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