0

IPC に .net リモート処理を使用するアプリに取り組んでいます。

クライアント アプリが起動すると、次のコードを使用してサーバーに接続します。

  chnl = gcnew HttpChannel();
  ChannelServices::RegisterChannel(chnl, false);      
  IPCObjectInstance = (BaseRemoteObject)Activator.GetObject(
     typeof(BaseRemoteObject),
     "http://localhost:1237/MyRemoteObject.soap");

そして、関数呼び出しを行うときは、次のコードを使用します。

  BaseRemoteObject.GetFileTextDelegate svd = new BaseRemoteObject.GetFileTextDelegate(IPCObjectInstance, BaseRemoteObject.GetFileText);
  AsyncCallback  callback  = new AsyncCallback(this, &ClientGUI.RecievedStringText);
  IAsyncResult  arValSet  = svd.BeginInvoke(callback, null);

このコードはそのままでうまく機能ます。ただし、起動時にサーバーが実行されているかどうかをクライアントに検出させ、適切なエラー メッセージを表示させたいと考えています。

サーバーが実行されていない場合、クライアントは Web 例外をスローする前に約 3 秒間待機します (下部に表示)。エラー「場所」がないため、try\catch ブロックをどこに置くかわかりません。

サーバーが実行されていないことを検出する最良の方法は何ですか?

ありがとう!

4

1 に答える 1

1

行の周りで try/catch を実行するとうまくいくはずBeginInvokeです。

しかし、私の提案はStatus、非同期ではなく同期的に呼び出すメソッドを作成し、代わりにその呼び出しを試行/キャッチすることです。何もしないダミーのメソッドである可能性があります。

指定したポートでリモート サーバーへの tcp 接続を開き、接続が確立されているかどうかを確認することもできます。しかし、これはリモート呼び出しの try/catch によく似ています。

于 2010-08-03T19:33:30.430 に答える