Делаем доступ к серверу через сеть

Прежде чем серверное приложение сможет принимать запросы удаленных вызовов процедур, необходимо обеспечить доступ к нему через сеть. Чтобы это сделать, необходимо известить run-time RPC о своем желании принимать вызовы по одной или нескольким последовательностям протоколов. Выбор поддерживаемых серверным приложением последовательностей протоколов является важным выбором: различные последовательности протоколов обладают различными характеристиками. Сервера, которые ожидают локальные вызовы должны использовать ncalrpc. Сервера, который принимают вызовы по сети, должны использовать ncacn_ip_tcp.

В данном примере показано использование ncacn_ip_tcp:

RPC_STATUS status;

status = RpcServerUseProtseq(

L"ncacn_ip_tcp",

RPC_C_PROTSEQ_MAX_REQS_DEFAULT, // зависит от выбранной последовательности протокола

NULL); // всегда NULL

Первый аргумент функции RpcServerUseProtseq – это последовательность протокола. Второй аргумент зависит от выбранной последовательности протокола, он означает длину очереди ожидающих запросов и используется только для последовательности протокола ncacn_ip_tcp. В приведенном выше примере используется константа RPC_C_PROTSEQ_MAX_REQS_DEFAULT, что указывает на использование значения по умолчанию. Третий параметр – это дескриптор безопасности, который не используется.

Большинство серверных программ используют все возможные последовательности протоколов, поддерживаемые сетью. Для регистрации на всех последовательностях используйте функцию RpcServerUseAllProtseqs.

Вы также можете использовать следующие функции RpcServerUseProtseqEx, RpcServerUseProtseqEp или RpcServerUseProtseqEpEx.

После того как серверное приложение зарегистрирует как минимум одну последовательность протокола, сервера, которые используют динамические конечные точки, должны создать информацию для связывания для каждой последовательности протокола, которую они используют. Сервер хранит информацию о связывании в векторе связывания, который он затем может экспортировать службе сопоставления конечных точек.

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

RPC_STATUS status;

RPC_BINDING_VECTOR *rpcBindingVector;

status = RpcServerInqBindings(&rpcBindingVector);

Единственный аргумент, передаваемый этой функции, – это указатель на указатель на структуру RPC_BINDING_VECTOR. RPC run-time динамически выделяет память для векторов связывания сохраняет адрес массива в переменной аргумента. Серверное приложение должно самостоятельно освободить память, после того как оно закончит работать с массивом, используя функцию RpcBindingVectorFree.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: