Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Punkt końcowy to adres specyficzny dla sieci procesu serwera na potrzeby zdalnych wywołań procedur. Rzeczywista nazwa punktu końcowego zależy od używanej sekwencji protokołu. Na przykład TCP, UDP i HTTP używają portów. Nazwane potoki używają nazwanej nazwy potoku. Aplikacje klienckie/serwerowe mogą używać dobrze znanego punktu końcowego lub dynamicznego punktu końcowego. W tej sekcji przedstawiono techniki używane przez programy serwerowe do określania dobrze znanych i dynamicznych punktów końcowych. Informacje zostały omówione w następujących tematach:
Określanie dobrze znanych punktów końcowych
Kiedy serwer używa dobrze znanego punktu końcowego, może dołączyć dane tego punktu do wpisu w bazie danych usługi nazw. Jeśli tak, dojście powiązania klienta zawiera pełny adres serwera, który zawiera dobrze znany punkt końcowy, gdy klient importuje dojście powiązania z pozycji serwera.
Program serwera może również określać dobrze znane punkty końcowe w tym samym czasie, w których określa sekwencje protokołów. Wywołaj funkcję RpcServerUseProtseqEp lub RpcServerUseProtseqEpEx. Różnica między nimi polega na tym, że ta ostatnia funkcja ma dodatkowy parametr, którego serwer może użyć do kontrolowania dynamicznej alokacji portów.
Jeśli program serwera określa w ten sposób informacje o punkcie końcowym, powinien również wywołać funkcję RpcEpRegister, aby zarejestrować punkt końcowy na mapie punktu końcowego. Mimo że punkt końcowy jest zawsze taki sam, klient może użyć mapy punktu końcowego, aby znaleźć serwer.
Podobnie jak sekwencje protokołów, aplikacja może określić informacje o punkcie końcowym w pliku IDL. W takim przypadku należy zarejestrować zarówno sekwencje protokołu, jak i punkty końcowe w tym samym czasie, wywołując funkcję RpcServerUseAllProtseqsIf lub RpcServerUseAllProtseqsIfEx. W takim przypadku klient ma dostęp do informacji o punkcie końcowym za pośrednictwem specyfikacji interfejsu w pliku IDL. W związku z tym nie jest konieczne wywołanie funkcji RpcEpRegister.
Określanie dynamicznych punktów końcowych
Dynamiczny punkt końcowy to punkt końcowy, który komputer hosta serwera przypisuje po rozpoczęciu wykonywania serwera. Większość aplikacji serwerowych używa dynamicznych punktów końcowych, aby uniknąć konfliktu z innymi programami w ograniczonej liczbie portów dostępnych w systemie komputera hosta serwera. Jednak programy korzystające z nazwanych potoków lub sekwencji protokołu ncalrpc mają bardzo dużą przestrzeń nazw dla punktów końcowych. Korzystają one mniej z dynamicznych punktów końcowych niż programy korzystające z innych transportów.
Programy serwera rejestrują dynamiczne punkty końcowe w bazie danych mapy punktu końcowego. Jeśli chcesz, aby serwer używał dowolnego dostępnego punktu końcowego, wywołaj RpcServerUseAllProtSeqs, RpcServerUseAllProtseqsEx, RpcServerUseProtseq lub RpcServerUseProtseqEx. Ustawia bibliotekę czasu wykonywania RPC do używania wszystkich prawidłowych sekwencji protokołów lub jednej z nich z dynamicznymi punktami końcowymi. Następnie serwer powinien wywołać RpcServerInqBindings, aby uzyskać zestaw prawidłowych dojść powiązań. Serwer przekazuje zestaw uchwytów powiązań lub wektor powiązań do funkcji RpcEpRegister, aby zarejestrować wszystkie odpowiednie punkty końcowe w mapie punktów końcowych. Dla każdego wywołania, które serwer wykonuje do RpcEpRegister, powinno istnieć odpowiednie wywołanie do RpcBindingVectorFree, aby zwolnić pamięć używaną przez wektor powiązania.
Należy pamiętać, że programy serwera mogą używać funkcji RpcEpRegisterNoReplace zamiast RpcEpRegister. Programy zazwyczaj używają RpcEpRegisterNoReplace, gdy na systemie hosta serwera musi być uruchomionych wiele kopii programu serwera.
Funkcje RpcEpRegister i RpcEpRegisterNoReplace dodają interfejsy serwera oraz uchwyty powiązania do bazy danych mapera punktów końcowych. Gdy klient wykonuje zdalne wywołanie procedury przy użyciu częściowo powiązanego dojścia, biblioteka czasu wykonywania klienta prosi maper punktu końcowego komputera serwera o punkt końcowy zgodnego wystąpienia serwera. Biblioteka klienta dostarcza identyfikator UUID interfejsu, sekwencję protokołów i, jeśli istnieje, identyfikator UUID obiektu w dojściu powiązania klienta. Maper punktu końcowego szuka wpisu bazy danych zgodnego z informacjami klienta. Identyfikator UUID interfejsu klienta/serwera, wersja główna interfejsu i sekwencja protokołu muszą być dokładnie zgodne. Ponadto wersja poboczna interfejsu serwera musi być większa lub równa wersji pobocznej klienta.
Jeśli wszystkie testy zakończyły się pomyślnie, maper końcówki zwraca prawidłowy punkt końcowy, a biblioteka uruchomieniowa klienta aktualizuje punkt końcowy w uchwycie powiązania.
Dynamiczne punkty końcowe są automatycznie czyszczone z bazy danych mapowania punktu końcowego, gdy proces serwera przestanie działać. Możesz usunąć punkt końcowy z bazy danych mapowania punktu końcowego przed zamknięciem programu serwera przy użyciu funkcji RpcEpUnregister lub zezwolić na automatyczne czyszczenie w celu zarządzania usunięciem punktu końcowego.