5

2 台の 64 ビット Windows マシン間で基本的な .NET Remoting 通信を確立しようとしています。Machine1 がクライアントとして機能し、Machine2 がサーバーとして機能している場合、すべて正常に動作します。逆に、次の例外が発生します。

System.Net.Sockets.SocketException: ターゲット マシンがアクティブに拒否したため、接続できませんでした 172.16.7.44:6666

サーバーコード:

TcpChannel channel = new TcpChannel(6666);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(
  typeof(MyRemotableObject),"HelloWorld",WellKnownObjectMode.Singleton);

クライアントコード:

TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan);
// Create an instance of the remote object
remoteObject = (MyRemotableObject)Activator.GetObject(
  typeof(MyRemotableObject), "tcp://172.16.7.44:6666/HelloWorld");

私のコードの何が問題なのですか?

4

2 に答える 2

11

Windowsファイアウォール?(質問の著者は、これはそうではないと言っています。)

接続の問題を追跡するには、標準的なアプローチが適用されます (任意の順序で適用されます)。

  • マシンに ping を実行する
  • 一部のプロセスが実際にポート 6666 でリッスンしているかどうかを再確認します ( netstat -an)
  • ポート 6666 でマシンを telnet します。
  • マシンで別のサービスを使用してみてください。
  • 構成によっては、6666 をリッスンしているサーバー プロセスが混乱し、拒否される場合があるかどうかを確認してください。(.NET リモート処理でそれが可能かどうかはわかりません)
  • TCP/IP レベルで何が起こっているかを調べるために、パケット スニファ (Packetyzer など) を使用してマシンとの通信を監視します。
  • サーバーとクライアントの間のアクティブなネットワーク インフラストラクチャ コンポーネント (レイヤー 3 スイッチ、ファイアウォール、NAT ルーターなど) が干渉している可能性があります。
于 2008-11-12T12:48:06.240 に答える
5

同じバイナリ/構成が一方向では機能するが、他の方法では機能しないと仮定すると、家のネットワーク側で何か問題があることがわかります。

  • IP アドレスを使用しています。IPCONFIG /ALL を使用して、ターゲット マシンのバインドされたアドレスを config/code と照合して再確認してください。
  • 「サーバー」マシンには複数の NIC がありますか? たとえば、サービスは両方ではなく 1 つの NIC にバインドされていますか?
  • サーバーにpingを実行すると、ICMPがマシン間でルーティング可能であることがわかります-クライアントからサーバー上のUNCパスを開くなど、セッション指向の要求を作成できますか。

ファイアウォールを超えて、私が経験した唯一の他の接続拒否の経験は次のとおりです。

  • 名前解決 - 既存のホスト エントリが間違っていました。ただし、ここで問題にする必要はありません。
  • IPSEC 指向 - マシン間のポリシーが異なるため、一方が他方からのインバウンド接続を受け入れることができませんでした。企業の安全な環境で作業している場合に可能です。IPSec 環境で作業する場合は、クロック、有効なマシン証明書などの単純なものを確認してください。これらはすべて、IPSec セッションの確立を妨げる可能性があります。
  • ストレスの問題 - サーバーの構成ミスにより、IP スタックが空き TCP 制御ブロックを使い果たしました。同様に、接続を確立できないように聞こえますが、おそらく問題ではありません。

ファイアウォール 1 から始めます。ポリシーを設定してそのソケットのインバウンド リクエストを除外するか、ソース IP からのすべてのソケットを信頼するか、すべて無効にするかのいずれかです。(個人的には、後者はテストとしては速くて汚いですが、本番環境では前者を行います)

そのイベント ログを超えて、ファイアウォールが有効になっているがパンチスルーされている場合は、証跡を監査します。Netmon などはすべてあなたの友達になります。

于 2008-11-12T13:00:57.820 に答える