2010-08-03 3 views
0

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

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

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

Он должен работать, чтобы попытаться поймать вашу линию BeginInvoke.

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

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

+0

Функция DoNothing, называемая синхронно работала отлично, спасибо! – greggorob64

Смежные вопросы