Usar orígenes y receptores de eventos observables y enumerables (StreamInsight)

StreamInsight admite orígenes del evento y receptores de eventos que implementan las interfaces IObservable e IEnumerable. Estas interfaces son los contratos dominantes de carácter general en .NET Framework para extraer (IEnumerable) e insertar (IObservable) datos entre los componentes de una aplicación.

Aunque las interfaces IEnumerable e IEnumerator ya son familiares para los desarrolladores de software de .NET, las interfaces IObservable e IObserver se incluyeron más recientemente en .NET Framework 4.0. El modelo de desarrollo de IObservable se basa en el patrón de diseño observable/observador. En este patrón de diseño:

  • Un observador es cualquier objeto que desea que se le notifique cuándo cambia el estado de otro objeto.

  • Un observable es una secuencia basada en la inserción en que otro objeto puede manifestar interés.

En una aplicación StreamInsight, el observable es el origen del evento. La consulta actúa como observador de este origen y presenta su resultado en forma de observable al receptor de eventos que, a su vez, es un observador de la consulta como el origen. Para obtener más información, vea Explorar el modelo de diseño de observador en MSDN.

Las tareas para que el desarrollador de aplicaciones habilite este modelo de desarrollo son mínimas:

  1. Proporcionar una clase que implemente la interfaz IObservable o IEnumerable como productor de eventos.

  2. Proporcionar una clase que implemente la interfaz IObserver o una clase que use una interfaz IEnumerable, como consumidor de eventos.

  3. Enlazar estos objetos a consultas.

Este modelo de desarrollo no requiere una inversión importante de programación o aprendizaje para definir las propiedades temporales de los eventos, ni el conocimiento de las transiciones de estado subyacentes del modelo de adaptador básico. A continuación se exponen algunos escenarios en que el modelo de desarrollo resulta apropiado:

  1. Consultas históricas. La analista financiera Alicia identifica patrones en datos de mercado históricos mediante la ejecución de consultas temporales en grandes conjuntos de datos. En este caso, el flujo de entrada tiene un final seguro: una vez procesado el último elemento de datos, la consulta debe terminar.

  2. Consultas ad hoc en orígenes activos. El administrador de servidor Roberto sospecha un posible ataque de denegación de servicio. Identifica el origen del ataque mediante una serie iterativa de consultas ad hoc en los flujos de datos de red que está supervisando.

  3. Incrustación en aplicaciones personalizadas. El desarrollador de software de interfaces de usuario Carlos diseña y analiza patrones de movimientos del mouse mediante consultas temporales en eventos de Windows. StreamInsight se incrusta en la aplicación personalizada.

En cada uno de estos casos, la consulta solo existe mientras la aplicación cliente se ocupa de escuchar los resultados.

En esta sección

Esta sección contiene los temas siguientes:

Consideraciones sobre programación para orígenes y receptores observables y enumerables

Los orígenes y receptores observables y enumerables se admiten solo en soluciones incrustadas

Los orígenes y receptores de eventos observables o enumerables se admiten solo en el modelo de implementación hospedada, en que el servidor de StreamInsight se incrusta en la aplicación. No se pueden usar orígenes y receptores de eventos observables o enumerables con el modelo de implementación de servidor remoto o independiente. Para obtener más información acerca de los modelos de implementación, vea Modelos de implementación del servidor de StreamInsight.

Las características de API admiten los requisitos temporales de StreamInsight

La API permite la fidelidad total con el modelo temporal de StreamInsight, incluida la acción de poner en cola eventos CTI.

  • En las entradas observables y enumerables:

    • Los métodos To[Point|Interval|Edge]Stream contienen los datos de entrada como eventos de StreamInsight y especifican las características temporales de los datos de origen.

    • Un método auxiliar y las propiedades de la clase AdvanceTimeSettings ayudan al desarrollador a especificar la frecuencia con que los eventos CTI se ponen en cola, determinando de ese modo la agilidad de los datos de entrada.

  • En las salidas observables y enumerables, el desarrollador puede elegir entre incorporar o no la información de hora en forma de eventos de punto, intervalo o perimetral mediante los métodos To[Point|Interval|Edge]Observable y To[Point|Interval|Edge]Enumerable.

La compatibilidad con elementos observables depende de Microsoft .NET Framework 4.0

Si la aplicación usa orígenes y receptores de eventos que implementan las interfaces IObservable o IObserver:

  • La aplicación debe hacer referencia al ensamblado Microsoft.ComplexEventProcessing.Observable.dll.

  • La aplicación debe tener como destino .NET Framework 4.0 (no .NET Framework 4 Client Profile).