Udostępnij przez


Określanie sekwencji protokołów

Aplikacje serwera muszą wybrać co najmniej jedną sekwencję protokołu, która ma być używana podczas komunikacji z klientem za pośrednictwem sieci. Wybór sekwencji protokołów jest zależny od sieci. Zobacz Interpretowanie informacji o powiązaniach i Wybieranie sekwencji protokołu.

Program serwera może zezwalać klientom na łączenie się przy użyciu dowolnej sekwencji protokołu obsługiwanej przez sieć. W tym celu wywołaj RpcServerUseAllProtseqs i przekaż RPC_C_PROTSEQ_MAX_REQS_DEFAULT jako pierwszy parametr. Nie jest to jednak zalecane podejście. Zamiast tego użycie ncalrpc dla wywołań lokalnych i ncacn_ip_tcp lub ncacn_http dla wywołań zdalnych jest zwykle wystarczające. Sieci heterogeniczne są nietypowe i praktycznie wszystkie sieci obsługują protokół TCP/IP.

Jeśli chcesz, aby klient ograniczył alokację portów dla dynamicznych punktów końcowych do określonego zakresu portów, wywołaj metodę RpcServerUseAllProtseqsEx. Ta funkcja jest specyficzna dla protokołu RPC firmy Microsoft i jest bardzo przydatna w przypadku zdalnych wywołań procedur, które przechodzą przez zaporę. Używa dodatkowego parametru do przekazywania flag kontroli alokacji portów do funkcji. Zobacz Konfigurowanie rejestru dla alokacji portów i selektywnego powiązania.

Podczas opracowywania interfejsów serwera można określić sekwencje protokołów i informacje o punkcie końcowym w pliku MIDL. Jeśli tak, serwer powinien użyć RpcServerUseAllProtseqsIf do zarejestrowania wszystkich sekwencji protokołów i skojarzonych informacji o punkcie końcowym podanych w pliku IDL. Ponadto istnieje odpowiednia funkcja RpcServerUseAllProtseqsIfEx, która umożliwia serwerowi przekazywanie flag kontroli alokacji portów.

Jeśli chcesz skonfigurować programy klienta i serwera do komunikowania się z określoną sekwencją protokołu, aplikacja serwera powinna wywołać RpcServerUseProtseq. Aby uzyskać pełną listę sekwencji protokołów RPC firmy Microsoft, zobacz Stałe sekwencji protokołów.

Usługa Microsoft RPC udostępnia również RpcServerUseProtseqEx, aby umożliwić aplikacjom wybieranie określonych sekwencji protokołów i kontrolowanie dynamicznej alokacji portów.

Oprócz protokołów opartych na połączeniu, RPC firmy Microsoft obsługuje również protokoły datagramowe (bezpołączeniowe). Zalecane są protokoły zorientowane na połączenia; Protokoły datagram mają różne zestawy funkcji niż protokoły zorientowane na połączenie i powinny być używane tylko wtedy, gdy deweloper systemu rozproszonego wymaga funkcji dostępnej tylko w protokołach datagramu. Niektóre funkcje dostępne przy korzystaniu z protokołów datagramowych to:

  • Datagramy obsługują protokoły transportu bez połączenia UDP i IPX.
  • Ponieważ nie jest konieczne ustanawianie i utrzymywanie połączenia, protokół datagramowy RPC wymaga mniejszego obciążenia związanego z zasobami.
  • Datagramy umożliwiają szybsze wiązanie.
  • Podobnie jak w przypadku wywołań RPC zorientowanych na połączenie, wywołania RPC datagramu są domyślnie nieidempotentne. Oznacza to, że nie ma gwarancji, że wywołanie nie zostanie wykonane więcej niż raz. Jednak funkcja może być oznaczona jako idempotentna w pliku IDL z informacją RPC, że wykonywanie funkcji więcej niż raz w odpowiedzi na pojedyncze żądanie klienta jest nieszkodliwe. Dzięki temu środowisko wykonawcze może zachować mniej stanu na serwerze. Należy pamiętać, że wywołanie idempotentne zostanie wykonane ponownie tylko w rzadkich okolicznościach w niestabilnej sieci.
  • Datagram RPC obsługuje atrybut broadcast IDL. Emisja umożliwia klientowi wydawanie komunikatów na wielu serwerach w tym samym czasie. Dzięki temu klient może zlokalizować jeden z kilku dostępnych serwerów w sieci lub jednocześnie kontrolować wiele serwerów. Należy pamiętać, że emisja datagramu jest ważna tylko w obrębie łącza lokalnego i zwykle nie przechodzi przez routery. Wywołania emisji są niejawnie idempotentne. Jeśli wywołanie zawiera parametry [], zwracana jest tylko pierwsza odpowiedź serwera. Gdy serwer odpowie, wszystkie przyszłe wywołania RPC przez ten uchwyt powiązania zostaną wysłane tylko do tego serwera, w tym wywołania z atrybutem broadcaście. Aby wysłać kolejną transmisję, utwórz nowy uchwyt powiązania lub wywołaj RpcBindingReset na istniejącym uchwycie.
  • Datagram RPC obsługuje atrybut IDL maybe. Dzięki temu klient wysyła wywołanie do serwera bez oczekiwania na odpowiedź lub potwierdzenie. Wywołanie nie może zawierać parametrów [out]. Wywołania używające i być może są niejawnie idempotentne.