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 генерирует исключение. Единственный коментарий к коду — при проверке на наличие
активной копии ловить не все исключения (как у меня), а пару-тройку определенных.
А то можно словить не то, что хотелось. Ж%)
А это черевато падением программы со своих нечестно занятых мегабайтов...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.