16
последовательности протоколов, и пункт назначения \pipe\hello. В приводимом
далее примере кода функция RpcStringBindingCompose комбинирует по-
следовательность протоколов, сетевой адрес (имя сервера), пункт назначения
(имя канала) и другие строковые элементы в форму, требующуюся для сле-
дующей функции, RpcBindingFromStringBinding, а также распределяет
память для размещения символьной строки. В свою очередь, RpcBinding-
FromStringBinding использует эту строку для генерации дескриптора, кото -
рый представляет связывание между сервером и клиентом . После того , как уда-
ленные вызовы процедур выполнены , RpcStringFree освобождает память,
которая была распределена RpcStringBindingCompose для структуры дан -
ных строки связывания . RpcBindingFree освобождает дескриптор.
Строка связывания (string binding), таким образом , является ключевым
понятием при реализации соединения программно- управляемого типа, по-
скольку содержит всю необходимую для этого информацию . Строка связыва-
ния состоит из нескольких подстрок , представляющих UUID интерфейса, по-
следовательность протоколов, сетевой адрес, пункт назначения и его опции.
Последовательность протоколов, в свою очередь, представляет сетевой RPC
протокол , а также определяет соглашения о соответствующем формате сетевых
адресов и об именовании пунктов назначения. Например , последовательность
протоколов ncacn_ip_tcp определяет протокол с установлением соединения,
в терминах NCA (Network Computing Architecture), над TCP/IP. При этом требу -
ется соответствующий формат представления сетевого адреса или имени серве-
ра, а пункт назначения обозначает серверный коммуникационный порт.
В общем случае последовательность протоколов содержит набор из трех
опций , которые должны быть определены для RPC-библиотеки времени вы -
полнения:
• RPC протокол , доступные опции – ncacn (NCA Connection-oriented) и
ncadg (Datagram-oriented);
• формат сетевого адреса, доступные опции – ip, dnet и osi;
• транспортный протокол , доступные опции – tcp, udp, nsp, dna, np
(named pipes) и nb (NetBIOS).
Заметим , что наиболее сложные распределенные приложения для получе-
ния дескриптора связывания должны использовать функции сервиса имен вме-
сто строк связывания. Функции сервиса имен позволяют серверу регистриро-
вать интерфейс, UUID, сетевой адрес и пункт назначения под одним логиче-
ским именем . Эти функции обеспечивают независимость расположения компо-
нентов приложения и легкость администрирования.
Полный текст программы клиента включает код для обработки ввода ко-
мандной строки и выглядит следующим образом :
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "hello.h" // заголовок, сгенерированный
// компилятором MIDL