2009-04-17 3 views
14

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

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

ответ

12

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

1

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

5

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

var context = System.ServiceModel.OperationContext.Current; 

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

string externalIP = property.Address; 
+4

Это клиентский IP-адрес, а не хост. – berdem

0

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

0

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

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
Смежные вопросы