2009-04-17 12 views
14

Tengo un servicio WCF alojado a través de IIS en varios servidores web. Tengo un método de registro que registra las llamadas a la base de datos y me gustaría registrar en qué servidor se está ejecutando la llamada.WCF: cómo obtener el IP del servidor o el nombre del servidor

¿Alguien sabe cómo obtener el nombre del servidor de host o la dirección IP que ejecuta la llamada WCF?

Respuesta

12

Use Dns.GetHostName(), porque es mucho mejor obtener el nombre de la computadora que la IP del host. Considere el caso cuando su computadora host tiene más de una dirección IP, tiene tarjetas de red virtuales (VMWare).

1

Dns.GetHostName() es lo que más uso.

5

Esto es lo que funcionó para nosotros. Asegúrese de tener una referencia a System.ServiceModel. A continuación, aplicar el siguiente código en su método de servicio:

var context = System.ServiceModel.OperationContext.Current; 

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

string externalIP = property.Address; 
+4

Es la dirección IP del cliente, no el host. – berdem

1
Environment.MachineName 

hace axactly que

0

nombre de host DNS no funciona debido a que muchos servidores tienen varios nombres de host y no se sabe cuál la servicio fue llamado. IIRC, IIS puede llamar a diferentes servicios web en función de qué nombre de host se especificó empeorando la situación. Usar .Current es excelente si no está ejecutando una sola instancia, en cuyo caso no siempre tiene un objeto de contexto no nulo, que es mi caso para todo lo anterior. Si alguien tiene algo más sólido, comparta :)

0

Puede usar el siguiente código para obtener la dirección base actual del servidor (host).

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
Cuestiones relacionadas