0

ここから単純な .Net リモート処理の例をダウンロードしましたhttp://www.codeproject.com/Articles/8771/Simple-but-potentially-useful-example-of-NET-Remot。この例は機能します。サーバー側のコードは、クライアントによって呼び出されます。以下のコードのように、そのクライアント コードを自分の C# プロジェクトにコピーすると、SocketException: No connection could be made because the target machine fails.

編集 1 開始

それはさらに奇妙になっています。動作するクライアントとしてテスト プロジェクトがあり、その動作中のプロジェクトを作業中のソリューションに追加し、プロジェクトの新しいデバッグ インスタンスを実行すると (その時点でソリューションから実行された唯一のプロジェクトです)、それは私にSocketExceptionを与えます:ターゲットマシンが積極的に拒否したため、接続できませんでした。ソリューションベースの構成などと関係があるようです。

エンド 1 エンド

この奇妙な動作のために、何かが足りないかどうかを確認したかったのです。そこで、新しいソリューションで新しい (winforms) プロジェクトを作成し、まったく同じコードを新しい form1_load イベントに配置しました。サーバー側のコードは、この新しく作成された winforms アプリケーションによって呼び出されます。まったく同じコードを使用して、あるアプリケーションがリモーティング経由で接続してサーバー側のコードを実行でき、別のアプリケーションができないということはどうしてあり得るのでしょうか? はい、Windows ファイアウォールをオフにしました。他のファイアウォールはありません。

上記のすべては、1 台のコンピューターでテストされています。そのため、物理的なネットワークは関係ありません。

助言がありますか?

    [STAThread]
    static void Main()
    {
        TcpClientChannel channel = new TcpClientChannel();
        ChannelServices.RegisterChannel(channel);
        IProcessActivator.IProcessActivator process_activator = (IProcessActivator.IProcessActivator)Activator.GetObject
        (
            typeof(IProcessActivator.IProcessActivator),
            "tcp://localhost:9000/ProcessActivator"
        );
        process_activator.Run("IExplore.exe", @"http://www.codeproject.com");
    }
4

2 に答える 2

0

リモーティング サービスがポートで実行されているかどうかを確認します9000。これは通常、サーバーがリッスンしているポートが、クライアントから接続しようとしているポートではないという事実により、私たちの側で発生します。また、ファイアウォールの問題が発生する可能性があるため、ポート9000がファイアウォールで例外として追加されていることを確認してください。

于 2013-07-09T11:24:46.487 に答える
0

サーバー側では、ダウンロードしたコードは TCP チャネルのポート 9000 と HttpChannel のポート 8000 で実行されています。コードで両方のポートを 9000 に設定しているかどうかを確認しますか? 1 つの通信チャネルに対して 1 つのポートのみを使用してください。アプリケーションが何度かクラッシュした場合、サーバー側のコードがバックグラウンドで実行されています。それらのプロセスを閉じてください。

2番目の理由は、あなたのプロジェクトには、通信に同じポートを使用する別のプロジェクトがある可能性があります.そのため、サーバーが実行されると、そのポートでのリッスンが停止し、ソケットでのターゲット呼び出し例外が発生します.

于 2013-07-09T11:41:59.167 に答える