Распределенные вычисления: технология Microsoft RPC. Часть1. Фертиков В.В. - 26 стр.

UptoLike

Составители: 

26
# makefile, фрагмент
server.exe : hellos.obj hellop.obj hello_s.obj
...
hello.h hello_s.c : hello.idl hello.acf
...
hellos.obj : hellos.c hello.h
...
hellop.obj : hellop.c hello.h
...
hello_s.obj : hello_s.c hello.h
...
Остановка серверного приложения
Робастная серверная программа при завершении работы должна остано-
вить прослушивание клиентов и аннулировать регистрацию интерфейса. Для
реализации такой возможности используются две специальные серверные
функции RpcMgmtStopServerListening и RpcServerUnregisterIf.
Серверная функция RpcServerListen не возвращает вызвавшей программе
управление до тех пор, пока не произойдет исключение или пока сервер не вы -
зовет RpcMgmtStopServerListening. В Microsoft RPC клиент не может не-
посредственно вызывать эту функцию , останавливающую прослушивание.
Можно , однако, разработать программу сервера так , чтобы пользователь мог
управлять ею как сервисом и таким способом заставлял другой поток серверно-
го приложения вызвать RpcMgmtStopServerListening. Другой путь реше-
ния задачи позволить клиентскому приложению останавливать серверное,
делая удаленный вызов процедуры на сервере, которая в свою очередь вызыва-
ет RpcMgmtStopServerListening. Следующий пример использует послед -
ний из подходов, для чего к HELLOP.C добавлена новая удаленная функция
Shutdown:
/* файл: hellop.c (фрагмент) */
#include "hello.h" // заголовок, сгенерированный
// компилятором MIDL
void Shutdown(void)
{
RPC_STATUS status;
status = RpcMgmtStopServerListening(NULL);
...
status = RpcServerUnregisterIf(NULL, NULL, FALSE);
...
}
                                    26
# makefile, фрагмент

server.exe : hellos.obj hellop.obj hello_s.obj
    ...
hello.h hello_s.c : hello.idl hello.acf
    ...
hellos.obj : hellos.c hello.h
    ...
hellop.obj : hellop.c hello.h
    ...
hello_s.obj : hello_s.c hello.h
    ...


    Остановка серверного приложения
    Робастная серверная программа при завершении работы должна остано-
вить прослушивание клиентов и аннулировать регистрацию интерфейса. Для
реализации такой возможности используются две специальные серверные
функции – RpcMgmtStopServerListening и RpcServerUnregisterIf .
Серверная функция RpcServerListen не возвращает вызвавшей программе
управление до тех пор, пока не произойдет исключение или пока сервер не вы-
зовет RpcMgmtStopServerListening . В Microsoft RPC клиент не может не-
посредственно вызывать эту функцию, останавливающую прослушивание.
Можно, однако, разработать программу сервера так, чтобы пользователь мог
управлять ею как сервисом и таким способом заставлял другой поток серверно-
го приложения вызвать RpcMgmtStopServerListening . Другой путь реше-
ния задачи – позволить клиентскому приложению останавливать серверное,
делая удаленный вызов процедуры на сервере, которая в свою очередь вызыва-
ет RpcMgmtStopServerListening . Следующий пример использует послед-
ний из подходов, для чего к HELLOP.C добавлена новая удаленная функция
Shutdown :

/* файл: hellop.c (фрагмент) */

#include "hello.h" // заголовок, сгенерированный
                   // компилятором MIDL
void Shutdown(void)
{
    RPC_STATUS status;

    status = RpcMgmtStopServerListening(NULL);
     ...
    status = RpcServerUnregisterIf(NULL, NULL, FALSE);
     ...
}