2013-03-15 3 views
6

Я смущен, почему что-то работает. Я настройки службы WCF следующим образом:WCF service endpoint localhost confusion

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

The BindingConfiguration и behaviorConfiguration очень просто, настройки некоторых тайм-аута.

В моем exe я запускаю этот хост.

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

Все это довольно просто и работает, я могу назвать эту услугу с другого компьютера. Однако, прочитав другую проблему (прослушивая сокеты tcp), у меня создается впечатление, что она не должна работать. Поскольку я привязываюсь к localhost, сервис не должен быть доступен извне компьютера, на котором он работает?
Я проверил netstat на ПК и привязал его к IP-адресу «0.0.0.0» вместо «127.0.0.1», объясняя, почему он работает с другого компьютера.

Но я не понимаю, почему это происходит с localhost на "0.0.0.0"?

+0

Я выкопал немного глубже, только чтобы больше запутаться. Если я использую 'net.tcp: // 127.0.0.1/service', он действительно привяжется к loopback, и он не будет доступен извне компьютера. Однако 'net.tcp: // localhost/service' будет связываться с 0.0.0.0 и будет доступен из-за пределов замыкания. Зачем? – Greuntesop

ответ

0

Net.tcp не ограничен связью на одной машине, возможно, вы думаете о net.pipe? Что касается 0.0.0.0: Как определяется файл хоста на машине, на которой запущена служба? Here - хорошая статья о WCF в целом.

+0

Привет, я не говорю, что net.tcp ограничен связью на одной машине. Я говорю, что если вы используете net.tcp: // localhost: ... он должен быть привязан к петлевому адресу и не быть доступен извне компьютера. Но это. – Greuntesop

Смежные вопросы