Pubblicazione e connessione al server StreamInsight

In un'applicazione di StreamInsight è possibile scegliere di incorporare il server StreamInsight in-process o di connettersi a un server remoto. In entrambi casi, si utilizza un oggetto server per sviluppare le query StreamInsight. Per connettersi a un'istanza remota, è necessario che questa ospiti il server StreamInsight ed esponga l'interfaccia di gestione del servizio Web.

Connessione a un server

Quando è ospitato in-process, il server StreamInsight viene creato tramite la chiamata seguente:

    Server server = Server.Create(…);

In alternativa, l'applicazione StreamInsight può connettersi a un server esistente in esecuzione come processo separato. Nell'esempio seguente un'applicazione client si connette a un server identificato da un indirizzo dell'endpoint specifico.

    Server server = Server.Connect(new System.ServiceModel.EndpointAddress(@"https://localhost/StreamInsight/MyInstance"));

In questo esempio viene eseguita la connessione a un servizio StreamInsight installato con il nome di istanza "MyInstance". Si noti che per connettersi a qualsiasi server StreamInsight (un servizio installato o l'applicazione server personalizzata), l'utente che esegue la connessione deve essere incluso nel gruppo corrispondente all'istanza del server. Per ulteriori informazioni su questo gruppo e sul servizio StreamInsight, vedere Installazione (StreamInsight).

Esposizione dell'endpoint server

Affinché sia possibile eseguire il metodo Connect(), il server deve esporre l'interfaccia di gestione tramite un endpoint servizio Web nell'URI specificato. Debugger flusso eventi di StreamInsight è, ad esempio, un'applicazione client che, in caso di connessione a un endpoint di un server attivo, può recuperare informazioni di diagnostica su query e altri oggetti a livello di server o registrare eventi da una query in esecuzione per ulteriori operazioni di debug.

Un'applicazione può esporre l'interfaccia di gestione di un server StreamInsight ospitato aggiungendo un endpoint servizio Web come illustrato nell'esempio seguente. Nell'esempio si presuppone la presenza di un'istanza di StreamInsight registrata denominata "MyInstance".

    Server server = Server.Create("MyInstance");
    ServiceHost host = new ServiceHost(server.CreateManagementService());
    host.AddServiceEndpoint(typeof(IManagementService),
                            new WSHttpBinding(SecurityMode.Message),
                            "https://localhost:8090/MyStreamInsightServer");
    host.Open();
    ...
    host.Close;

Si noti che è necessario aggiungere un riferimento a Microsoft.ComplexEventProcessing.ManagementService.dll e specificare lo spazio dei nomi corrispondente per utilizzare il servizio di gestione.

StreamInsight utilizza Windows Communication Foundation (WCF) per l'interfaccia del servizio Web. Una discussione completa sulla configurazione di WCF esula dall'ambito di questa documentazione, tuttavia è importante tenere in considerazione i punti seguenti quando si espone il servizio Web:

  • L'associazione all'URL specificato richiede che questo URL sia riservato all'account utente che esegue l'applicazione. Se l'applicazione StreamInsight non viene eseguita con diritti di amministratore, è necessario eseguire il comando seguente in una shell del comando con privilegi elevati:

    netsh http add urlacl url=http://+:8090/MyStreamInsightServer user=<domain\userid>
    

    La prenotazione URL tramite netsh richiede che sia sempre specificato un nome porta. Scegliere una porta che non sia già stata utilizzata. Utilizzare il comando seguente per elencare gli URL che sono attualmente riservati.

    netsh http show urlacl
    

    Si noti che l'utilizzo di caratteri jolly nella prenotazione URL ha effetto sul parametro HostNameComparisonMode dell'associazione. La modalità di corrispondenza predefinita di un'associazione è StrongWildcard. Se, ad esempio, si desidera consentire l'esatta corrispondenza dei nomi host (utilizzando "localhost" nella specifica dell'endpoint del server e consentendo solo la connessione dei client locali), è necessario innanzitutto impostare la modalità corrispondente:

    WSHttpBinding binding = new WSHttpBinding(SecurityMode.Message);
    binding.HostNameComparisonMode = HostNameComparisonMode.Exact;
    host.AddServiceEndpoint(typeof(IManagementService),
            binding,
            "https://localhost:8090/MyStreamInsightServer");
    

    Come qualsiasi altra proprietà WCF, è possibile specificarla anche in app.config.

    Quindi è necessario riservare anche l'ambito URL corrispondente utilizzando il comando netsh:

    netsh http add urlacl url=https://localhost:8090/MyStreamInsightServer user=<domain\userid>
    
  • Nell'esempio precedente la configurazione dell'endpoint viene specificata a livello di programmazione. In alternativa, l'endpoint può essere configurato tramite un file app.config, come qualsiasi altra applicazione basata su WCF. Il servizio StreamInsight installato utilizza, ad esempio, una configurazione dichiarativa di questo tipo per ogni istanza registrata. Il file di configurazione è disponibile nella cartella di installazione di StreamInsight in Host\<instance_name> ed è denominato StreamInsightHost.exe.config.

  • In Windows XP e Windows Server 2003 netsh non è disponibile. In alternativa, è necessario installare gli strumenti di supporto di Windows Server 2003 e utilizzare il comando httpcfg da "<unità>:Programmi\Support Tools\" per riservare gli URL. Ad esempio, il comando per riservare un URL con caratteri jolly per l'account del servizio di rete è:

    httpcfg set urlacl /u http://+:80/StreamInsight/MyStreamInsightServer /a "D:(A;;GX;;;NS)"
    

Quando si espone il servizio Web per le connessioni in rete, considerare le informazioni specifiche seguenti.

  • Per impostazione predefinita, il servizio StreamInsight installato consente solo le connessioni locali. Quando è necessario esporre il servizio Web del servizio installato in computer diversi da localhost, è necessario attenersi alla procedura descritta di seguito:

    1. Modificare l'impostazione della prenotazione dell'URL per il servizio dal computer '"localhost" esplicito al carattere jolly "+".

    2. Impostare la corrispondenza dei nomi host nel file app.config del servizio su StrongWildcard.

  • Quando si abilitano connessioni remote, è necessario aprire la porta specificata nel firewall del server.

  • Quando si esegue la connessione di un client a un'istanza del server remoto nella rete mediante il nome del computer, viene utilizzata l'autenticazione Kerberos anziché l'autenticazione NTLM se si utilizza l'indirizzo IP. Ciò significa che il client deve impostare un'identità UPN per l'endpoint prima di eseguire la connessione:

    EndpointIdentity ei = EndpointIdentity.CreateUpnIdentity(WindowsIdentity.GetCurrent().Name);
    EndpointAddress ea = new EndpointAddress(new Uri(@"http://machinename:8090/MyStreamInsightServer"), ei, (AddressHeaderCollection)null);
    server = Server.Connect(ea);
    

Per ulteriori informazioni sulla specifica degli endpoint, vedere la documentazione su WCF.

Vedere anche

Concetti

Monitoraggio delle query e del server StreamInsight

Utilizzo di Debugger flusso eventi di StreamInsight

Esempio end-to-end di StreamInsight

Cronologia modifiche

Contenuto aggiornato

Sono stati corretti gli esempi di codice e sono state aggiunte nuove informazioni nella sezione "Esposizione dell'endpoint server".