Сведения о одноранговом распределении
API однорангового распределения, который поддерживает функцию кэша филиалов в Windows 7, Windows Server 2008 R2, Windows 8 и Windows Server 2012, предлагает набор API платформы, которые могут повысить скорость реагирования централизованных приложений в сети при доступе из удаленных офисов и помочь снизить общее использование глобальной сети (WAN) без вмешательства в технологии безопасности сети.
Система однорангового распространения предлагает набор API-интерфейсов платформы, используемых как издателями, предоставляющими цифровое содержимое, так и пользователями, запрашивающими его. Чтобы легко различать эти роли, может быть проще представить издателя в роли сервера и потребителя в роли клиента. Кроме того, важно помнить, что помимо этих концептуальных ролей, служба однорангового распределения является истинной одноранговой системой, о чем свидетельствует возможность для любого узла однорангового распределения как публиковать, так и использовать цифровое содержимое. API платформы однорангового распространения предоставляются издателям и потребителям с помощью библиотеки импорта Win32 (PeerDist.Lib).
Жизненный цикл содержимого, предоставленного издателем и полученного потребителем с помощью службы однорангового распределения, состоит из следующих операций:
Описание | |
---|---|
Публикация содержимого | Публикация выполняется для создания описания содержимого, который называется "Сведения о содержимом" или " Сведения о содержимом " для краткости. Затем эти сведения о содержимом могут использоваться экземпляром службы однорангового распространения для проверки подлинности и перестроения содержимого. Когда содержимое публикуется приложением в службе однорангового распространения, которая по сути является операцией на стороне сервера, это содержимое связывается с удостоверением издателя, которое основано на идентификаторе безопасности пользователя, связанного с маркером доступа потока. Эта привязка выполняется для ограничения доступа к содержимому неавторизованных сущностей. Однако важно отметить, что доступ к сведениям о содержимом эквивалентен доступу к самому содержимому, так как эти сведения можно использовать для получения содержимого из одноранговых узлов или размещенного кэша. Существует новая версия структуры данных сведений о содержимом в Windows 8, однако предыдущая версия по-прежнему поддерживается. Чтобы взаимодействовать с клиентами Windows 7, администратор может настроить службу однорангового распространения для использования предыдущей версии структуры данных сведений о содержимом. |
Получение содержимого | Для получения содержимого из службы однорангового распространения потребитель должен предоставить доступ к опубликованным сведениям о содержимом, связанным с этим содержимым. Служба однорангового распространения, используемая для публикации содержимого, может предоставлять связанные сведения о содержимом. После получения сведений о содержимом потребитель может использовать другие API однорангового распространения для запроса содержимого из службы однорангового распространения. Служба однорангового распространения попытается получить содержимое из локальной сети. Если содержимое недоступно, клиентское приложение отвечает за получение содержимого с исходного сервера. |
Удаление публикации | Для приложений, которые опубликовали содержимое в службе однорангового распространения, предоставлена функция PeerDistServerUnpublish , позволяющая отменить публикацию содержимого. После отмены публикации содержимого локальная служба однорангового распространения больше не будет предоставлять сведения о содержимом, связанные с этим содержимым. |
Асинхронные завершения
API однорангового распределения поддерживает асинхронную модель API, и в результате API однорангового распределения позволяют использовать порты завершения ввода-вывода или события в качестве сигнальных механизмов для обработки завершений асинхронных операций однорангового распределения. Для любого из этих механизмов одноранговое распределение использует структуру OVERLAPPED . Как правило, одноранговое распределение берет на себя владение структурой OVERLAPPED и любыми параметрами выхода, которые клиент передает асинхронным функциям API. Клиент не должен получать доступ к этим ресурсам до завершения конкретной асинхронной функции. Как только асинхронные функции будут завершены, службе однорангового распределения больше не потребуется доступ к этим ресурсам, и они могут использоваться повторно по мере необходимости вызывающего приложения.
Асинхронное завершение не будет выполняться, если функция возвращает код ошибки, отличный от ERROR_IO_PENDING. Возврат значения, отличного от ERROR_IO_PENDING , означает, что вызов завершился синхронно. Если API однорангового распределения возвращает ERROR_IO_PENDING, вызывающий объект должен дождаться асинхронного завершения.
Код ошибки асинхронного завершения можно получить одним из двух способов:
Завершение ввода-вывода на основе порта ввода-вывода
Пользователь вызывает механизм порта завершения ввода-вывода, предоставляя дескриптор порта завершения и ключ завершения для следующих функций API:
PeerDistRegisterForStatusChangeNotification
PeerDistServerPublishStream
PeerDistServerOpenContentInformation
PeerDistClientOpenContent
Пользователь создает порт завершения, вызывая CreateIoCompletionPort. Этот дескриптор порта завершения можно одновременно использовать для других асинхронных операций ввода-вывода, а также для операций однорангового распределения.
Вызывающий объект должен использовать функцию GetQueuedCompletionStatus для управления асинхронным завершением. Если асинхронная операция завершается сбоем, функция GetQueuedCompletionStatus возвращает значение FALSE , а GetLastError — соответствующий код ошибки. Вызывающий объект должен игнорировать все поля структуры OVERLAPPED, если код ошибки отличается от ERROR_SUCCESS. Асинхронная операция завершается успешно, если функция GetQueuedCompletionStatus возвращает значение TRUE.
Дополнительные сведения см. в разделе Порты завершения ввода-вывода.
Завершение на основе событий
Если вызывающий объект задает допустимый дескриптор события для поля hEvent структуры OVERLAPPED , одноранговое распределение использует его для оповещения о завершении связанной асинхронной операции ввода-вывода.
Вызывающий поток может управлять перекрывающимися операциями, указывая дескриптор объекта события ручного сброса структуры OVERLAPPED в одной из функций ожидания. После передачи сигнала о событии вызывающий объект должен вызвать PeerGetOverlappedResult , передав соответствующую структуру OVERLAPPED . PeerGetOverlappedResult возвращает значение FALSE , а вызывающий объект должен вызвать GetLastError , чтобы получить код ошибки. Вызывающий объект должен игнорировать все поля структуры OVERLAPPED, если код ошибки отличается от ERROR_SUCCESS. Асинхронная операция завершается успешно, если функция PeerGetOverlappedResult возвращает значение TRUE.
Если вызывающий объект предоставляет порт завершения вместе с событием, событие будет использоваться в качестве механизма завершения.
Windows 7: Используйте функцию GetOverlappedResult вместо PeerGetOverlappedResult.