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

UptoLike

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

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
                                    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   
#include   
#include   
#include   "hello.h" // заголовок, сгенерированный
                     // компилятором MIDL