2012-02-10 6 views
4

VS2010 C#プロジェクトでは、MarshalByRefObjectから派生したクラスがあり、Activator.GetObjectを使用してクラスを設定しています。この派生クラスを使用して、ネットワーク上のマシンと話をしています。MarshalByRefObjectが有効かどうかをテストするにはどうすればよいですか?

ターゲットマシンが動作中で、pingを実行できますが、話したいプログラムが実行されていない場合は、30秒待ってから例外が発生します。私の派生したMarshalByRefObjectが有効かどうかを知る方法はありますか?

現在のところ、try/catchはこの状況を処理していますが、30秒の待機は受け入れられません。あなたはだけでなく、正確なエラーMSGはあなたがマーシャリングされているかを示してどのようなあなたは、タスクがping()メソッドを呼び出して、タスクの明示的なタイムアウトを使用した試みることができる

+0

を置くことができますコード..?あなたはトンネリングをしていますか?Tunel Claass – MethodMan

+0

"ターゲットマシンが積極的にそれを拒否したため、接続できませんでした。IP:Port"私はトンネリングを使用しているとは思わない。 – LightLabyrinth

答えて

4

...

Task task = new Task(() => { try { obj.Ping(); } catch {} }); 
task.Start(); 
if(!task.Wait(1000)) throw new TimeoutException(); 
// handle other task exceptions etc 
+0

ありがとう、それは私が探していたものではありませんが、それは大幅に待機時間を短縮しました。 – LightLabyrinth

+0

@LightLabyrinth note:デリゲート内にtry/catch **があるはずです –

+0

この解決策は、 "SocketExceptionがユーザーコードによって処理されていません" - "ターゲットマシンがそれを積極的に拒否したために接続できませんでした。 :ポート"。これはtry/catch内にあります。私はそれをキャッチすることはできませんので、これは別のスレッドで発生しているようにGoogleを使用して...私は運がないとデリゲートの中にtry/catchを入れてみました。 – LightLabyrinth

関連する問題