wykład 7

Transkrypt

wykład 7
Składowe
Co robi serwer
1. Rejestracja interfejsu –
rejestracja pozwala systemowi
RPC na mapowanie wywołań
klienta do właściwej funkcji
serwera.
2. Informacja dowiązania wskazuje
RPC jakich protokołów serwer
będzie nasłuchiwał (mają one
czasami różne możliwości)
3. Rejestracja w mapie punktów
końcowych umożliwia klientom
uzyskanie informacji na jakim
punkcie serwer nasłuchuje (na
ogół tcp/ip lub named pipe).
4. Oczekiwanie na żądania
Co robi klient
1. Tworzenie uchwytu dowiązania
(binding handle): jaki serwer w
jaki sposób (różnew poziomy
kontroli)
2. Wywołanie RPC przez stub w
sposób identyczny z lokalnym
3. Znalezienie procesu serwera za
pomocą endpoint map
4. Przepakowanie argumentów i
wysłanie
IDL
• IDL służy do uzgadniania interfejsów pomiędzy
stronami. Tworzy kontrakt
• Samo IDL jest niezależne od systemu
• Kompilator IDL pozwala na mapowanie na języki
programowania
• Konfigurację specyficzną dla systemu zawierają ACF
(można ew. połączyć z IDL)
• ODL – do definiowania obiektów będzie o tym później
Przykładowy IDL
[
uuid (906B0CE0-C70B-1067-B317-00DD010662DA),
implicit_handle(handle_t hExample1Binding)
]
interface r1test
{
void HelloProc([in, string] unsigned char * pszString);
void Shutdown(void);
}
•IDL zawiera informacje niezależne od platformy
•Plik IDL zawiera kilka definicji interfejsów. Każda definicja składa się z
nagłówka w [] i ciała {}
•Nagłówek zawiera atrybuty odnoszące się do interfejsu jako całości (w
szczególności GUID)
•Ciało zawiera deklaracje funkcji (podobne do C) i atrybuty opisujące
poszczególne elementy deklaracji
•Istnieją także pliki ACF zawierajace atrybuty zależne od platformy (czyli nie
wpływające na samą komunikację). Można je dołączyć do IDL (np.
implicit_handle)
Wiązanie
• Klient musi wiedzieć do jakiego serwera się
połączyć. Ustalamy to za pomocą wiązania i
pliku ACF
– [auto_handle]
– [implicit_handle]
– [explicit_handle]
• Kolejne poziomy dowiązania pozwalają ustalić
coraz bardziej szczegółowe definicje dowiązania
użyte przez RPC RTL do wykonywania wywołań
(od użycia lokatora aż po pełną kontrolę)
Wywołania
• Po ustaleniu dowiązania funkcje z klienta
wywołujemy tak jak lokalne
• Należy zadbać o odpowiednie ustawienia
zabezpieczeń dla używanego protokołu (firewall)
• Należy pamiętać o dużym koszcie czasowym
uzdalniania wywołań, fasada wywołań zdalnych
• Wywołania mogą się nie powieść z różnych
powodów nie występujących w rozwiązaniach
lokalnych. Należy obsłużyć wyjątki.
Konteksty
•
•
•
•
•
•
Czasami konieczne jest zachowanie stanu sesji pomiędzy klientem i
serwerem. Nie zawsze (bezpieczeństwo, wygoda, efektywność) można
wykorzystać wzorzec Client Session State dla całych danych (a tylko dla
uchwytu kontekstu) i stosujemy Server Session State (ew. Database
Session State). Wzorce stanu sesji
W pliku IDL definiujemy uchwyt z atrybutem [context_handle] i standardowo
void*
Z punktu widzenia serwera uchwyt kontekstu jest wskaźnikiem void* którym
możemy wskazać dane sesji. Do klienta przesyłany jest uchwyt a nie adres!
Klient jedynie przekazuje uchwyt w celu identyfikacji sesji. W jego
kontekscie (przestrzenii adresowej) jest on bez znaczenia.
W przypadku utraty łączności serwer wywołuje funkcje run-down (o ile
atrybut [context_handle] jest w typedef). Klient zaś resetuje kontekst po
swojej stronie wywołaniem odpowiedniej funkcji
(RpcSsDestroyClientContext)
Context_handle może prowadzić do problemów z wątkowaniem przy
jednoczesnych wywołaniach. Zazwyczaj dostęp do instancji uchwytu jest
serializowany w środowisku wielowątkowym.

Podobne dokumenty