.net Remoting: обнаружение, если сервер не работает - PullRequest
0 голосов
/ 03 августа 2010

Я работаю над приложением, которое использует .net remoting для IPC.

Когда мое клиентское приложение запускается, оно использует следующий код для подключения к серверу:

  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);

Этот код работает отлично как есть.Однако я хочу, чтобы мой клиент определял, работает ли сервер при загрузке, и отображал соответствующее сообщение об ошибке.

Когда сервер не работает, клиент ждет около 3 секунд, прежде чем выдать веб-исключение (показано внизу).Нет ошибки "location", поэтому я не уверен, куда поместить блок try \ catch.

Как лучше всего определить, что мой сервер не работает?

Спасибо!

1 Ответ

1 голос
/ 03 августа 2010

Это должно сработать, чтобы попытаться поймать строку BeginInvoke.

Но я бы предложил создать метод Status, который вы вызываете синхронно, а не асинхронно, и выполняете попытку / ловитьвместо этого звонка вместо.Это может быть фиктивный метод, который ничего не делает.

Также возможно открыть tcp-соединение с удаленным сервером по указанному порту и посмотреть, получено ли соединение.Но это было бы очень похоже на попытку / ловушку вокруг удаленного вызова.

...