2009-04-17 13 views
14

Ho un servizio WCF che è ospitato tramite IIS su più server web. Ho un metodo di registrazione che registra le chiamate al database e vorrei registrare su quale server è in esecuzione la chiamata.WCF: come ottenere l'IP dell'host o il nome del server

Qualcuno sa come ottenere il nome del server host o l'indirizzo IP su cui è in esecuzione la chiamata WCF?

risposta

12

Utilizzare Dns.GetHostName(), perché è molto meglio ottenere il nome del computer rispetto all'IP dell'host. Considerare il caso in cui il computer host ha più di un indirizzo IP, ha schede di rete virtuali (VMWare).

1

Dns.GetHostName() è quello che uso di più.

5

Questo è ciò che ha funzionato per noi. Assicurati di avere un riferimento a System.ServiceModel. Quindi implementare il seguente codice nel tuo metodo di servizio:

var context = System.ServiceModel.OperationContext.Current; 

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

string externalIP = property.Address; 
+4

È l'indirizzo IP del client, non l'host. – berdem

1
Environment.MachineName 

fa axactly che

0

nome host DNS non funziona perché molti server hanno più nomi host e non si sa quale il è stato chiamato il servizio. IIRC, IIS può chiamare diversi servizi Web in base al nome host specificato, peggiorando la situazione. utilizzando .Current è ottimo se non si sta eseguendo una singola istanza, nel qual caso non si dispone sempre di un oggetto contesto non nullo, che è il mio caso per tutto quanto sopra. Se qualcuno ha qualcosa di più solido, si prega di condividere :)

0

È possibile utilizzare il seguente codice per ottenere l'indirizzo di base corrente del server (host).

using System.ServiceModel; 

var baseAddress = OperationContext.Current.Host.BaseAddresses[0].Authority; 
Problemi correlati