Share via


Actualizaciones personalizadas de secuencias

Los transportes orientados a secuencia como TCP y las canalizaciones con nombre funcionan en una secuencia continua de bytes entre el cliente y servidor. Esta secuencia la realiza un objeto Stream. En una actualización de secuencia, el cliente desea agregar una capa de protocolo opcional a la pila del canal y pide al otro lado del canal de comunicación que lo haga. La actualización de secuencia consiste en reemplazar el objeto Stream original con uno actualizado.

Por ejemplo, puede generar directamente una secuencia de compresión encima de la secuencia de transporte. En este caso, el transporte Stream original se reemplaza con uno que encapsula la compresión Stream alrededor del original.

Puede aplicar varias actualizaciones de secuencia, cada una que encapsule a la precedente.

Cómo funcionan las actualizaciones de secuencia

Hay cuatro componentes en el proceso de actualización de secuencia.

  1. Un Iniciador de secuencia de actualización comienza el proceso: en tiempo de ejecución puede iniciar una solicitud al otro extremo de su conexión para actualizar el nivel de transporte del canal.
  2. Un Aceptador de secuencia de actualización lleva a cabo la actualización: en tiempo de ejecución recibe la solicitud de actualización del otro equipo y, si es posible, acepta la actualización.
  3. Un Proveedor de actualización crea el Iniciador en el cliente y el Aceptador en el servidor.
  4. Se agrega un Elemento de enlace de actualización de secuencia a los enlaces en el servicio y en el cliente y crea el proveedor en tiempo de ejecución.

Observe que en el caso de varias actualizaciones, el iniciador y aceptador encapsulan las máquinas de estado para exigir qué transiciones de actualización son válidas para cada iniciación.

Cómo implementar una actualización de secuencia

Windows Communication Foundation (WCF) proporciona cuatro clases abstract que puede implementar:

Para implementar una actualización de secuencia personalizada, haga lo siguiente. Este procedimiento implementa un proceso de actualización de secuencia mínimo en los equipos del servidor y del cliente.

  1. Cree una clase que implemente StreamUpgradeInitiator.
    1. Invalide el método InitiateUpgrade para tomar la secuencia que se va a actualizar y devuelva la secuencia actualizada. Este método funciona sincrónicamente; hay métodos análogos para iniciar de forma asincrónica la actualización.
    2. Invalide el método GetNextUpgrade para comprobar las actualizaciones adicionales.
  2. Cree una clase que implemente StreamUpgradeAcceptor.
    1. Invalide el método AcceptUpgrade para tomar la secuencia que se va a actualizar y devuelva la secuencia actualizada. Este método funciona sincrónicamente; hay métodos análogos para aceptar de forma asincrónica la actualización.
    2. Invalide el método CanUpgrade para determinar si este aceptador de actualización admite la actualización solicitada en el proceso de actualización.
  3. Cree una clase que implemente StreamUpgradeProvider. Invalide los métodos CreateUpgradeAcceptor y CreateUpgradeInitiator para devolver las instancias del aceptador e iniciador definidas en los pasos 2 y 1.
  4. Cree una clase que implemente StreamUpgradeBindingElement.
    1. Invalide el método BuildClientStreamUpgradeProvider en el cliente y el método BuildServerStreamUpgradeProvider en el servicio.
    2. Invalide el método BuildChannelFactory en el cliente y el método BuildChannelListener en el servicio para agregar la actualización Elemento de enlace a BindingParameters.
  5. Agregue el nuevo elemento de enlace de actualización de secuencia a los enlaces en los equipos del cliente y del servidor.

Actualizaciones de seguridad

Agregar una actualización de seguridad es una versión especializada del proceso de actualización de secuencia general.

WCF ya proporciona dos elementos de enlace para actualizar la seguridad de la secuencia. La configuración de la seguridad de nivel de transporte la encapsula WindowsStreamSecurityBindingElement y SslStreamSecurityBindingElement, que se pueden configurar y agregar a un enlace personalizado. Estos elementos de enlace extienden la clase StreamUpgradeBindingElement que genera los proveedores de actualización de secuencia del cliente y el servidor. Estos elementos de enlace tienen métodos que crean las clases de proveedor de actualización de secuencia de seguridad especializadas, que no son public, por lo que para estos dos casos solamente se necesita agregar el elemento de enlace a este enlace.

Para los escenarios de seguridad que no se incluyan en los dos elementos de enlace anteriores, tres clases abstract relacionadas con seguridad se derivan de las clases base de iniciador, aceptador y proveedor anteriores:

  1. System.ServiceModel.Channels.StreamSecurityUpgradeInitiator
  2. System.ServiceModel.Channels.StreamSecurityUpgradeAcceptor
  3. System.ServiceModel.Channels.StreamSecurityUpgradeProvider

El proceso de implementar una actualización de secuencia de seguridad es igual que antes, con la diferencia de que derivaría de estas tres clases. Invalide las propiedades adicionales en estas clases para proporcionar información de seguridad al tiempo de ejecución.

Varias actualizaciones

Para crear solicitudes de actualización adicionales, repita el proceso arriba mencionado: cree extensiones adicionales de StreamUpgradeProvider y elementos de enlace. Agregue los elementos de enlace al enlace. Se procesan los elementos de enlace adicionales secuencialmente, empezando por el primer elemento de enlace agregado al enlace. En BuildChannelFactory y BuildChannelListener cada proveedor de actualización puede determinar cómo disponerse en capas en cualquiera de los parámetros de enlace de actualización ya existentes. Debería reemplazar a continuación el parámetro de enlace de actualización existente con un nuevo parámetro de enlace de actualización compuesta.

Alternativamente, un proveedor de actualización puede admitir varias actualizaciones. Por ejemplo, podría desear implementar un proveedor de actualización de secuencia personalizado que admita seguridad y compresión. Realice las acciones siguientes:

  1. StreamSecurityUpgradeProvider subclase para escribir la clase de proveedor que crea el iniciador y el aceptador.
  2. Cree subclase de StreamSecurityUpgradeInitiator asegurándose de invalidar el método GetNextUpgrade para devolver los tipos de contenido para la secuencia de compresión y la secuencia segura en orden.
  3. Cree subclase de StreamSecurityUpgradeAcceptor que entienda los tipos de contenido personalizados en su método CanUpgrade.
  4. La secuencia se actualizará después de cada llamada a GetNextUpgrade y CanUpgrade.

Consulte también

Referencia

StreamUpgradeInitiator
StreamSecurityUpgradeInitiator
StreamUpgradeAcceptor
StreamSecurityUpgradeAcceptor
StreamUpgradeProvider
StreamSecurityUpgradeProvider
StreamUpgradeBindingElement
SslStreamSecurityBindingElement
WindowsStreamSecurityBindingElement