Handles de contexte

Il arrive parfois que les applications distribuées exigent que le programme serveur conserve status informations entre les appels clients. Les programmes serveurs qui servicent plusieurs clients à la fois doivent conserver les informations d’état pour chaque client. Étant donné que le client et le serveur utilisent des espaces d’adressage différents sur différents ordinateurs et qu’ils ne se font pas nécessairement confiance mutuellement, les approches courantes de partage de données ne fonctionnent souvent pas. Par instance, le client et le serveur ne peuvent pas conserver les informations status sur leur session à distance dans des variables globales, car ils ne partagent pas le même espace d’adressage global. Il est difficile de conserver les informations dans un fichier partagé, car elles s’exécutent sur différents ordinateurs. Une approche simpliste peut être d’envoyer tous les états au client et de demander au client de le retourner lors de l’appel suivant, mais cette approche présente des défauts : le serveur ne fait pas nécessairement confiance au client pour retourner l’état approprié, et l’état peut être implicitement lié à un autre état sur le serveur, tel que des handles de fichiers ou des sockets ouverts.

Microsoft RPC fournit un mécanisme puissant et sécurisé appelé handles de contexte pour conserver l’état associé à un client donné sur un serveur. Les informations d’état sont appelées contexte du serveur. Les clients peuvent obtenir un handle de contexte pour identifier le contexte du serveur pour leurs sessions RPC individuelles.

Par exemple, chaque client d’une application distribuée peut demander au programme serveur de créer et de mettre à jour un fichier de données pour sa session RPC. Le serveur peut utiliser son handle de fichier pour le fichier de données de chaque client comme handle de contexte. Chaque fois qu’un client demande des opérations sur le fichier de données créé par le serveur, il transmet le handle de contexte au serveur. Le client n’obtient pas réellement le handle de fichier lui-même ; il obtient un jeton opaque que le serveur au moment de l’exécution RPC peut associer de manière unique au handle de fichier. Étant donné que le handle de contexte est en fait un handle de fichier, le handle de contexte n’a de sens que dans l’espace d’adressage du serveur. Toutefois, le programme client peut utiliser le handle de contexte pour indiquer au serveur sur quel fichier effectuer les mises à jour.

D’autres données peuvent également être des handles de contexte. Par instance, un client et un serveur peuvent utiliser un numéro d’enregistrement d’un enregistrement de base de données comme handle de fichier. Si le client devait effectuer un certain nombre de mises à jour sur un enregistrement particulier, il peut obtenir le numéro d’enregistrement en tant que handle de contexte. Il transmettait le numéro d’enregistrement au serveur chaque fois qu’il appelait une procédure distante pour mettre à jour l’enregistrement de base de données.

Le plus souvent, un handle de contexte pointe vers un bloc de mémoire sur le serveur où le serveur conserve diverses informations de gestion.

Cette section présente des informations sur la définition et l’utilisation de handles de contexte. La discussion est présentée dans les rubriques suivantes :