Acerca de la distribución del mismo nivel

La API de distribución del mismo nivel, que admite la característica Caché de sucursales en Windows 7, Windows Server 2008 R2, Windows 8 y Windows Server 2012 ofrece un conjunto de API de plataforma que pueden aumentar la capacidad de respuesta de red de las aplicaciones centralizadas cuando se accede desde oficinas remotas y ayudan a reducir el uso general de la red de área extensa (WAN) sin interferir con las tecnologías de seguridad de red.

El sistema de distribución del mismo nivel ofrece un conjunto de API de plataforma utilizadas por los publicadores que proporcionan contenido digital y consumidores que lo solicitan. Para diferenciar fácilmente estos roles, puede ser más fácil pensar en el publicador en un rol de servidor y el consumidor en un rol de cliente. Además, es importante recordar que, aparte de estos roles conceptuales, el servicio de distribución del mismo nivel es un sistema del mismo nivel verdadero, como se indica en la capacidad de cualquier nodo de distribución del mismo nivel para publicar y consumir contenido digital. Las API de la plataforma de distribución del mismo nivel se exponen a publicadores y consumidores mediante una biblioteca de importación de Win32 (PeerDist.Lib).

El ciclo de vida del contenido proporcionado por un publicador y recuperado por un consumidor con el servicio de distribución del mismo nivel se compone de las siguientes operaciones:

Descripción
Publicación de contenido La publicación se realiza para generar una descripción del contenido llamado Información de contenido o Información de contenido para abreviar. A continuación, una instancia del servicio de distribución del mismo nivel puede usar esta información de contenido para autenticar y recompilar el contenido. Cuando una aplicación publica contenido en el servicio distribución del mismo nivel, que conceptualmente es una operación del lado servidor, ese contenido se asocia a la identidad del publicador, que se basa en el SID del usuario asociado al token de acceso del subproceso. Este enlace se realiza para limitar el acceso al contenido por entidades no autorizadas. Sin embargo, es importante tener en cuenta que el acceso a la información de contenido es equivalente al acceso al propio contenido, ya que la información de contenido se puede usar para obtener el contenido de elementos del mismo nivel o una caché hospedada.
Hay una nueva versión de la estructura de datos de información de contenido en Windows 8; sin embargo, todavía se admite la versión anterior. Para interoperar con clientes de Windows 7, un administrador puede configurar el servicio de distribución del mismo nivel para usar la versión anterior de la estructura de datos de información de contenido.
Recuperación de contenido Para que un consumidor recupere contenido del servicio distribución del mismo nivel, se debe proporcionar acceso a la información de contenido publicada asociada a ese contenido. El servicio de distribución del mismo nivel que se usa para publicar el contenido puede proporcionar la información de contenido asociada. Una vez que el consumidor tiene la información de contenido, se pueden usar otras API de distribución del mismo nivel para solicitar contenido desde el servicio de distribución del mismo nivel. El servicio distribución del mismo nivel intentará recuperar el contenido de la red local. Si el contenido no está disponible, la aplicación cliente es responsable de recuperar el contenido del servidor de origen.
Eliminación de publicación En el caso de las aplicaciones que han publicado contenido en el servicio de distribución del mismo nivel, se ha proporcionado la función PeerDistServerUnpublish para permitir que el contenido no se publique. Una vez que el contenido no se haya publicado, el servicio de distribución del mismo nivel local ya no proporcionará la información de contenido asociada a ese contenido.

Finalizaciones asincrónicas

Peer Distribution API admite un modelo de API asincrónico y, como resultado, las API de distribución del mismo nivel permiten el uso de puertos de finalización de E/S o eventos como mecanismos de señalización para procesar finalizaciones asincrónicas de la operación de distribución del mismo nivel. Para cualquiera de los mecanismos, La distribución del mismo nivel usa una estructura SUPERPUESTA . En general, La distribución del mismo nivel toma la propiedad de una estructura SUPERPUESTA y los parámetros de salida que el cliente pasa a las funciones de API asincrónicas. El cliente no debe tener acceso a estos recursos hasta que se complete la función asincrónica concreta. En cuanto se completen las funciones asincrónicas, el servicio de distribución del mismo nivel ya no requerirá acceso a estos recursos y se pueden reutilizar a medida que la aplicación que realiza la llamada se ajuste.

No habrá ninguna finalización asincrónica si la función devuelve cualquier código de error distinto de ERROR_IO_PENDING. La devolución de un valor distinto de ERROR_IO_PENDING significa que se ha producido un error en la llamada de forma sincrónica. Si la API de distribución del mismo nivel devuelve ERROR_IO_PENDING, el autor de la llamada debe esperar a la finalización asincrónica.

El código de error de la finalización asincrónica se puede recuperar de una de estas dos maneras:

Finalización basada en puerto de finalización de E/S

El usuario invoca el mecanismo de puerto de finalización de E/S proporcionando un identificador de puerto de finalización y una clave de finalización a las siguientes funciones de API:

PeerDistRegisterForStatusChangeNotification
PeerDistServerPublishStream
PeerDistServerOpenContentInformation
PeerDistClientOpenContent

El usuario crea un puerto de finalización llamando a CreateIoCompletionPort. Este identificador de puerto de finalización se puede usar simultáneamente para otras operaciones de E/S asincrónicas, así como para operaciones específicas de distribución del mismo nivel.

El llamador debe usar la función GetQueuedCompletionStatus para administrar la finalización asincrónica. Si se produce un error en la operación asincrónica, la función GetQueuedCompletionStatus devolverá FALSE y GetLastError devolverá el código de error adecuado. El autor de la llamada debe omitir todos los campos de la estructura SUPERPUESTA si el código de error es distinto de ERROR_SUCCESS. La operación asincrónica se realiza correctamente si la función GetQueuedCompletionStatus devuelve TRUE.

Para obtener más información, vea Puertos de finalización de E/S.

Finalización basada en eventos

Si el autor de la llamada establece un identificador de evento válido en el campo hEvent de la estructura SUPERPUESTA , la distribución del mismo nivel la usa para indicar que se ha completado la operación de E/S asincrónica asociada.

Un llamador de subprocesos puede administrar operaciones superpuestas especificando un identificador para el objeto de evento de restablecimiento manual de la estructura SUPERPUESTA en una de las funciones de espera. Una vez señalado el evento, el autor de la llamada debe llamar a PeerGetOverlappedResult pasando la estructura SUPERPUESTA adecuada. PeerGetOverlappedResult devolverá FALSE y el autor de la llamada debe llamar a GetLastError para recuperar el código de error. El autor de la llamada debe omitir todos los campos de la estructura SUPERPUESTA si el código de error es distinto de ERROR_SUCCESS. La operación asincrónica se realiza correctamente si la función PeerGetOverlappedResult devuelve TRUE.

Si el autor de la llamada proporciona un puerto de finalización junto con un evento, el evento se usará como mecanismo de finalización.

Windows 7: Use la función GetOverlappedResult en lugar de PeerGetOverlappedResult.

Referencia de api de distribución del mismo nivel