2013-03-15 7 views
6

何かがうまくいかない理由は混乱しています。WCFサービスエンドポイントローカルホストの混乱

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

BindingConfigurationとbehaviorConfigurationはいくつかのタイムアウトを設定し、非常に単純です:私はこのようなWCFサービスを構成しています。

私のexeでは、私はこのようなホストを開始します。

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

これはすべて非常に簡単で動作します。私はこのサービスを別のPCから呼び出すことができます。しかし、別の問題(TCPソケットでリッスンしている)を読んだあと、動作してはいけないという印象を受けます。 localhostにバインドしているので、サービスは実行中のPCの外部からアクセスできないはずですか?
私はPC上でnetstatをチェックしましたが、なぜそれが別のPCから動作するのかを説明する "127.0.0.1"の代わりにIPアドレス "0.0.0.0"にバインドしました。

しかし、なぜそれがlocalhostから "0.0.0.0"になるのか分かりません。

+0

少し深く掘り下げて、もっと混乱させました。 'net.tcp:// 127.0.0.1/service'を使用すると、実際にループバックにバインドされ、PCの外部から到達できなくなります。しかし、 'net.tcp:// localhost/service'は0.0.0.0にバインドされ、ループバックの外側から到達可能です。どうして? – Greuntesop

答えて

0

Net.tcpは1台のマシンでの通信に限定されていないので、おそらくnet.pipeを考えていますか? 0.0.0.0について:ホストファイルはサービスを実行しているマシン上でどのように定義されていますか? Hereは一般的にWCFの素晴らしい記事です。

+0

こんにちは、私はnet.tcpが1台のマシン上の通信に限定されていると言っているわけではありません。 net.tcp:// localhost:...を使用すると、ループバックアドレスにバインドされ、pcの外部から到達できないと言います。しかし、それはです。 – Greuntesop