2013-03-15 23 views
6

Sono confuso sul motivo per cui qualcosa funziona. Sto configurazione di un servizio WCF come questo:WCF service endpoint localhost confusione

<services> 
    <service name="ClientCommand" behaviorConfiguration="SomeServiceBehavior"> 
    <endpoint contract="IClientCommand" binding="netTcpBinding" BindingConfiguration="TcpPort" address="net.tcp://localhost:1304" /> 
    </service> 
</services> 

Il BindingConfiguration e behaviorConfiguration sono molto semplice, basta configurare alcuni timeout.

Nel mio exe, avvio l'host in questo modo.

_serverHost = new ServiceHost(type); // implementing IClientCommand 
_serverHost.Open(); 

È tutto piuttosto semplice e funziona, posso chiamare questo servizio da un PC diverso. Tuttavia, dopo aver letto su un altro problema (ascoltando i socket tcp), ho l'impressione che non dovrebbe funzionare. Poiché sono impegnato a localhost, il servizio non dovrebbe essere accessibile dall'esterno del PC su cui è in esecuzione?
Ho controllato netstat sul pc e ha eseguito il binding all'indirizzo IP "0.0.0.0" invece di "127.0.0.1" spiegando perché funziona da un altro pc.

Ma non capisco perché va da localhost a "0.0.0.0"?

+0

Ho scavato un po 'più a fondo, solo per diventare più confuso. Se uso 'net.tcp: // 127.0.0.1/service', si collegherà effettivamente al loopback e non sarà raggiungibile dall'esterno del pc. Tuttavia 'net.tcp: // localhost/service' si collegherà a 0.0.0.0 ed è raggiungibile dall'esterno del loopback. Perché? – Greuntesop

risposta

0

Net.tcp non è limitato alla comunicazione su una macchina, forse stai pensando su net.pipe? Riguardo a 0.0.0.0: Come viene definito il file host sulla macchina che esegue il servizio? Here è un bell'articolo su WCF in generale.

+0

Ciao, non sto dicendo che net.tcp è limitato alla comunicazione su una macchina. Sto dicendo che se usi net.tcp: // localhost: ... dovrebbe essere associato all'indirizzo di loopback e non essere raggiungibile dall'esterno del pc. Ma è. – Greuntesop