Ejemplo de StreamInsight: cliente A, usar un servidor remoto

 

Este ejemplo muestra el proceso de crear un cliente de StreamInsight que usa un servidor remoto y entidades definidas en el servidor. Para obtener más información acerca de las entidades StreamInsight, vea Conceptos de StreamInsight.

Este ejemplo usa el servidor remoto y las entidades creadas en el ejemplo de servidor de esta sección. Para usar los ejemplos de esta sección conjuntamente, realice lo siguiente:

  1. Ejecute el ejemplo de servidor Ejemplo de StreamInsight: servidor, exponer un servidor insertado

  2. Ejecute uno o ambos ejemplos de cliente:

Paso a paso

En general, un cliente StreamInsight típico sigue estos pasos básicos:

  • Crear una instancia de servidor StreamInsight

  • Crear u obtener una aplicación StreamInsight

  • Definir u obtener un origen

  • Crear una consulta del origen

  • Definir u obtener un receptor

  • Enlazar y ejecutar la consulta y el receptor

En este ejemplo, el cliente obtiene una aplicación y las entidades existentes del servidor.

Conectar al servidor

El proceso de crear un programa cliente de StreamInsight se inicia con la creación de instancias de una instancia del servidor de StreamInsight. En este ejemplo, el cliente se conecta a un servidor remoto denominado “MyStreamInsightServer”.

var server = Server.Connect
(new System.ServiceModel.EndpointAddress(@"https://localhost/MyStreamInsightServer"))  

Para obtener más información acerca de las opciones disponibles para conectar a un servidor de StreamInsight, vea Publicar en el servidor de StreamInsight y conectarse a él.

Obtener la aplicación de servidor

En este ejemplo, el cliente usa la aplicación StreamInsight que se ha creado en el servidor remoto. Todas las entidades de servidor que usará este cliente se han definido en esta aplicación.

myApp = server.Applications["serverApp"];  

Obtener el origen

A continuación, obtenga el origen que se ha definido en el servidor.

var mySource = myApp.GetObservable<int>("serverSource");  

Crear una consulta del origen

A continuación, cree una consulta del origen de entrada. La consulta usa LINQ como el lenguaje de especificación de consulta. En este ejemplo, la consulta devuelve el valor de todos los eventos con numeración par + 1000.

  
var myQuery = from e in mySource  
              where e % 2 == 0  
              select e + 1000;  
  

Obtener el receptor

A continuación, obtenga el receptor que se ha definido en el servidor.

var mySink = myApp.GetObserver<int>("serverSink");  

Enlazar y ejecutar la consulta y el receptor

En este punto, la consulta se puede enlazar al receptor y, a continuación, se ejecuta en un proceso en el servidor.

var proc = myQuery.Bind(mySink).Run("serverProcess_Client_A");  

Este proceso es la única entidad que este cliente ha creado en el servidor.

Ejemplo completo

El siguiente ejemplo combina los componentes descritos anteriormente para crear una aplicación completa. Por simplicidad, este ejemplo no comprueba las posibles condiciones de error, sino que supone que el servidor del ejemplo, Ejemplo de StreamInsight: servidor, exponer un servidor insertado, está en ejecución y que se han creado las entidades esperadas.

  
using System;  
using System.ServiceModel;  
using Microsoft.ComplexEventProcessing;  
using Microsoft.ComplexEventProcessing.Linq;  
using Microsoft.ComplexEventProcessing.ManagementService;  
using System.Reactive;  
using System.Reactive.Linq;  
  
namespace StreamInsight21_example_ClientA  
  
    /* This example:  
     * connects to a remote server  
     * gets the app, source, and sink defined in the server  
     * creates a simple query over the source, binds it to the sink, and runs it  
     * waits for the user to stop the program  
     */  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            // Connect to the StreamInsight server  
            using (var server = Server.Connect(new System.ServiceModel.EndpointAddress(@"https://localhost/MyStreamInsightServer")))  
            {  
                /* The following entities are expected to be defined in the server:  
                 * serverApp0  
                 * serverSource0  
                 * serverSink0  
                 */  
                /* The following entity will be defined in the server by this client:  
                 * serverProcess_Client_A  
                 */  
  
                // Get the existing StreamInsight APPLICATION  
                var myApp = server.Applications["serverApp"];  
  
                // GET the SOURCE from the server  
                var mySource = myApp.GetStreamable<long>("serverSource");  
  
                // Compose a QUERY on the source (return every even-numbered item + 1000)  
                var myQuery = from e in mySource  
                              where e % 2 == 0  
                              select e + 1000;  
  
                // GET the SINK from the server  
                var mySink = myApp.GetObserver<long>("serverSink");  
  
                // BIND the QUERY to the SINK and RUN it  
                using (var proc = myQuery.Bind(mySink).Run("serverProcess_Client_A"))  
                {  
                    // Wait for the user to stop the program  
                    Console.WriteLine("----------------------------------------------------------------");  
                    Console.WriteLine("Client A is running, press Enter to exit the client");  
                    Console.WriteLine("----------------------------------------------------------------");  
                    Console.WriteLine(" ");  
                    Console.ReadLine();  
                }  
            }  
        }  
    }  
}  
  

Vea también

Ejemplo de StreamInsight: servidor, exponer un servidor insertado
Ejemplos de StreamInsight
Conceptos de StreamInsight