Дескрипторы контекста
Иногда распределенным приложениям требуется серверная программа для поддержания сведений о состоянии между вызовами клиентов. Серверные программы, обслуживающие несколько клиентов за раз, должны хранить сведения о состоянии для каждого клиента. Так как клиент и сервер используют разные адресные пространства на разных компьютерах, и они не обязательно доверяют друг другу, распространенные подходы к совместному использованию данных часто не работают. Например, клиент и сервер не могут поддерживать сведения о состоянии удаленного сеанса в глобальных переменных, так как они не используют одно и то же глобальное адресное пространство. Сведения в общем файле трудно хранить, так как они выполняются на разных компьютерах. Упрощенный подход может быть отправкой всего состояния клиенту и возвратить его клиенту на следующем вызове, но этот подход имеет недостатки: сервер не обязательно доверяет клиенту возвращать правильное состояние, и состояние может быть неявно привязано к другому состоянию на сервере, например дескрипторам файлов или открытым сокетам.
Microsoft RPC предоставляет мощный и безопасный механизм, называемый дескрипторами контекста для поддержания состояния, связанного с заданным клиентом на сервере. Сведения о состоянии называются контекстом сервера. Клиенты могут получить дескриптор контекста для идентификации контекста сервера для отдельных сеансов RPC.
Например, каждый клиент в распределенном приложении может создать и обновить файл данных для сеанса RPC. Сервер может использовать его дескриптор файлов для каждого файла данных клиента в качестве дескриптора контекста. Каждый раз, когда клиент запрашивает операции с файлом данных, создаваемым сервером, клиент передает дескриптор контекста серверу. Клиент фактически не получает сам дескриптор файла; Он получает непрозрачный маркер, который время выполнения RPC сервера может однозначно связать с дескриптором файла. Так как дескриптор контекста на самом деле является дескриптором файла, то дескриптор контекста имеет смысл только в адресном пространстве сервера. Однако клиентская программа может использовать дескриптор контекста, чтобы сообщить серверу, на каком файле выполнять обновления.
Другие данные также могут быть дескрипторами контекста. Например, клиент и сервер могут использовать запись записи записи базы данных в качестве дескриптора файлов. Если клиенту необходимо выполнить ряд обновлений для определенной записи, он может получить номер записи в качестве дескриптора контекста. Он передает номер записи серверу каждый раз, когда он вызывает удаленную процедуру для обновления записи базы данных.
Чаще всего дескриптор контекста указывает на блок памяти на сервере, где сервер хранит различные сведения об управлении.
В этом разделе представлены сведения об определении и использовании дескрипторов контекста. Обсуждение представлено в следующих разделах:
- Разработка интерфейса с помощью дескрипторов контекста
- разработка сервера с помощью дескрипторов контекста
- разработка клиентов с помощью дескрипторов контекста
- подпрограмма запуска контекста сервера
- сброса контекста клиента
- многопоточные клиенты и дескриптор контекста