2009-04-17 5 views
14

J'ai un service WCF hébergé via IIS sur plusieurs serveurs Web. J'ai une méthode de journalisation qui enregistre les appels à la base de données et je voudrais enregistrer sur quel serveur l'appel s'exécute.WCF: comment obtenir l'adresse IP ou le nom du serveur

Est-ce que quelqu'un sait comment obtenir le nom du serveur hôte ou l'adresse IP sur laquelle l'appel WCF s'exécute?

Répondre

12

Utilisez Dns.GetHostName(), car il est préférable d'obtenir le nom de l'ordinateur que l'adresse IP de l'hôte. Considérez le cas où votre ordinateur hôte a plus d'une adresse IP, a des cartes réseau virtuelles (VMWare).

1

Dns.GetHostName() est ce que j'utilise le plus.

5

C'est ce qui a fonctionné pour nous. Assurez-vous que vous avez une référence à System.ServiceModel. mettre en œuvre ensuite le code suivant dans votre méthode de service:

var context = System.ServiceModel.OperationContext.Current; 

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

string externalIP = property.Address; 
+4

C'est l'adresse IP du client, pas l'hôte. – berdem

1
Environment.MachineName 

-t axactly que

0

nom d'hôte DNS ne fonctionne pas parce que de nombreux serveurs ont plusieurs noms d'hôtes et vous ne savez pas lequel la le service a été appelé. IIRC, IIS peut appeler différents services Web en fonction du nom d'hôte spécifié qui aggrave la situation. utiliser .Current est super si vous n'exécutez pas une seule instance, auquel cas vous n'avez pas toujours un objet de contexte non nul, ce qui est mon cas pour tout ce qui précède. Si quelqu'un a quelque chose de plus solide, veuillez partager :)

0

Vous pouvez utiliser le code suivant pour obtenir l'adresse de base actuelle du serveur (hôte).

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
Questions connexes