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