rpc, проверить запущен ли сервер
От: DmitrySergeev  
Дата: 21.06.02 03:14
Оценка:
Привет !
Подключаюсь к серверу функцией RpcBindingFromStringBinding.
Но даже если серверная часть приложения не запущена эта
функция фозвращает RPC_S_OK. Почему так происходит ?
Как отследить что сервер не запущен на стадии подключения?
Спасибо.
Re: rpc, проверить запущен ли сервер
От: Schmel  
Дата: 29.06.02 03:12
Оценка:
Доброе время суток уважаемый.

DS>Подключаюсь к серверу функцией RpcBindingFromStringBinding.

DS>Но даже если серверная часть приложения не запущена эта
DS>функция фозвращает RPC_S_OK. Почему так происходит ?
DS>Как отследить что сервер не запущен на стадии подключения?

Из моих личных наблюдений (могу и ошибаться), RpcBindingFromStringBinding() просто
создает привязку протокола передачи к RPC, настройку стандартного маршалинга,
после чего возвращает состояние реализации приваяки: удачно или нет.

/////////////////
//
//   serverRPCCode.cpp

// прототип RPC_StartServer()
boolean RPC_StartServer(void);

/////////////////
// admCode.cpp

#include "IServer_s.c"             // Генерируется MIDL'ом
#include "IServer.h"               // Генерируется MIDL'ом
// ....
RpcTryExcept  
{
    if (!RPC_StartServer())
    AfxMessageBox("Can't start server.");
}
RpcExcept(1) 
{
    char* str = (char*)malloc(20);
    ulCode = RpcExceptionCode();              // 0x06A6 (1702) - на эту ошибку проверять в 
                                              // случае отсутствия сервера или корректной привязки.
    sprintf(str, "Runtime reported exception 0x%lx = %ld\n", ulCode, ulCode);
    AfxMessageBox(str);
    free(str);
}
RpcEndExcept


Вышеприведенный код — из личного проекта. Проверка на результат функции невозможна.
RPC генерирует исключение. Единственный коментарий к коду — при проверке на наличие
активной копии ловить не все исключения (как у меня), а пару-тройку определенных.
А то можно словить не то, что хотелось. Ж%)
А это черевато падением программы со своих нечестно занятых мегабайтов...
Re[2]: rpc, проверить запущен ли сервер
От: Максим Алексейкин Россия  
Дата: 30.06.02 14:44
Оценка:
Точно.
Только перехватом исключений
ICQ #311116826
Re[3]: rpc, проверить запущен ли сервер
От: Дмитрий Глебенок Германия  
Дата: 19.08.02 15:06
Оценка:
Здравствуйте Максим Алексейкин, Вы писали:

МА>Точно.

МА>Только перехватом исключений

Да ладно вам. Не все так страшно.
Необходимо просто создать файл IDL_NAME.ACF — и запустить IDL_NAME.IDL на компиляцию...

Например:

interface TEST{
[comm_status, fault_status] RPC_Test();
}

После это, если сервер не загружен, функция просто вернет ошибку... Никаких трапов не будет...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.