WCF: как получить IP-адрес хоста или имя сервера - PullRequest
15 голосов
/ 17 апреля 2009

У меня есть служба WCF, которая размещается через IIS на нескольких веб-серверах. У меня есть метод ведения журнала, который регистрирует вызовы в базу данных, и я хотел бы указать, на каком сервере выполняется вызов.

Кто-нибудь знает, как получить имя хост-сервера или IP-адрес, на котором выполняется вызов WCF?

Ответы [ 6 ]

13 голосов
/ 17 июня 2009

Используйте Dns.GetHostName (), потому что гораздо лучше получить имя компьютера, чем IP-адрес хоста. Рассмотрим случай, когда ваш хост-компьютер имеет более одного IP-адреса, имеет виртуальные сетевые карты (VMWare).

5 голосов
/ 31 августа 2009

Это то, что сработало для нас. Убедитесь, что у вас есть ссылка на System.ServiceModel. Затем внедрите следующий код в свой метод обслуживания:

var context = System.ServiceModel.OperationContext.Current;

RemoteEndpointMessageProperty property = (RemoteEndpointMessageProperty)context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];

string externalIP = property.Address;
1 голос
/ 22 ноября 2010
Environment.MachineName 

точно делает это

1 голос
/ 17 апреля 2009

Dns.GetHostName () - это то, что я использую больше всего.

0 голосов
/ 05 мая 2017

Вы можете использовать следующий код для получения текущего базового адреса сервера (хоста).

using System.ServiceModel;

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority;
0 голосов
/ 22 января 2016

DNS-имя хоста не работает, потому что многие серверы имеют несколько имен хостов, и вы не знаете, на каком из них была вызвана служба. IIRC, IIS могут вызывать различные веб-службы, в зависимости от того, какое имя хоста было указано, что еще больше ухудшает ситуацию. Использование .Current прекрасно, если вы не запускаете ни одного экземпляра, и в этом случае у вас не всегда есть ненулевой объект контекста, что является моим случаем для всего перечисленного. Если у кого-нибудь есть что-то более солидное, поделитесь:)

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