2013-03-15 17 views
6

Nie jestem pewien, dlaczego coś działa. Mam konfiguracji usługi wcf tak:Punkt końcowy usługi WCF localhost confusion

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

The BindingConfiguration i behaviorConfiguration są bardzo proste, wystarczy konfigurowania pewne limity czasu.

W moim exe, uruchamiam hosta w ten sposób.

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

To wszystko jest bardzo proste i działa, mogę nazwać tę usługę z innego komputera. Jednak po przeczytaniu innego zagadnienia (nasłuchiwanie na gniazdach tcp), odnoszę wrażenie, że to nie powinno działać. Ponieważ jestem zobowiązany do localhost usługa nie powinna być dostępna spoza komputera, na którym działa?
Sprawdziłem netstat na komputerze i to wiązało się do adresu IP "0.0.0.0" zamiast "127.0.0.1" wyjaśniając, dlaczego działa z innego komputera.

Ale nie rozumiem, dlaczego przechodzi z localhost do "0.0.0.0"?

+0

Kopałem trochę głębiej, tylko po to, żeby się bardziej pogubić. Jeśli użyję 'net.tcp: // 127.0.0.1/service', to rzeczywiście będzie on wiązał się z pętlą zwrotną i nie będzie dostępny z zewnątrz komputera. Jednak 'net.tcp: // localhost/service' zwiąże się z 0.0.0.0 i będzie osiągalne poza pętlą zwrotną. Czemu? – Greuntesop

Odpowiedz

0

Net.tcp nie jest ograniczony do komunikacji na jednym komputerze, może myślisz na net.pipe? Odnośnie 0.0.0.0: W jaki sposób zdefiniowano plik hosta na komputerze, na którym działa usługa? Here to fajny artykuł na temat WCF w ogóle.

+0

Witam, nie mówię, że net.tcp jest ograniczony do komunikacji na jednym komputerze. Mówię, że jeśli używasz net.tcp: // localhost: ... powinien być związany z adresem pętli zwrotnej i nie może być dostępny z zewnątrz komputera. Ale to jest. – Greuntesop

Powiązane problemy