Veröffentlichen auf dem StreamInsight-Server und Herstellen einer Verbindung mit dem Server

In einer StreamInsight-Anwendung können Sie den StreamInsight-Server prozessintern einbetten oder mit einem Remoteserver verbinden. In beiden Fällen entwickeln Sie StreamInsight-Abfragen mithilfe eines Serverobjekts. Um eine Verbindung mit einer Remoteinstanz herzustellen, muss diese den StreamInsight-Server hosten und die Webdienst-Verwaltbarkeitsschnittstelle verfügbar machen.

Verbinden mit einem Server

Wenn der StreamInsight-Server prozessintern gehostet wird, wird er durch den folgenden Aufruf erstellt:

    Server server = Server.Create(…);

Alternativ kann die StreamInsight-Anwendung eine Verbindung mit einem vorhandenen Server herstellen, der als eigener Prozess ausgeführt wird. Im folgenden Beispiel stellt eine Clientanwendung eine Verbindung mit einem Server her, der durch eine bestimmte Endpunktadresse identifiziert wird.

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

In diesem Beispiel wird eine Verbindung mit einem installierten StreamInsight-Dienst hergestellt, dessen Instanzname "MyInstance" lautet. Beachten Sie, dass Benutzer, die eine Verbindung mit einem beliebigen StreamInsight-Server (installierter Dienst oder benutzerdefinierte Serveranwendung) herstellen möchten, Mitglied der Gruppe sein müssen, die der Server-Instanz entspricht. Weitere Informationen über diese Gruppe und den StreamInsight-Dienst finden Sie unter Installation (StreamInsight).

Verfügbarmachen des Serverendpunkts

Für die erfolgreiche Ausführung der Connect()-Methode muss der Server die zugehörige Verwaltbarkeitsschnittstelle über einen Webdienstendpunkt am angegebenen URI (Uniform Resource Identifier) verfügbar machen. Beispielsweise ist der StreamInsight-Ereignisflussdebugger eine Clientanwendung, die Diagnoseinformationen zu Abfragen und anderen Objekten auf Serverebene abrufen oder Ereignisse einer gegenwärtig ausgeführten Abfrage für Debugzwecke aufzeichnen kann, wenn sie mit einem Endpunkt eines Live-Servers verbunden ist.

Eine Anwendung kann durch Hinzufügen eines Webdienstendpunkts die Verwaltbarkeitsschnittstelle eines gehosteten StreamInsight-Servers verfügbar machen, wie im folgenden Beispiel gezeigt. Im Beispiel wird davon ausgegangen, dass eine registrierte StreamInsight-Instanz mit dem Namen "MyInstance" vorhanden ist.

    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;

Beachten Sie, dass Sie einen Verweis auf "Microsoft.ComplexEventProcessing.ManagementService.dll" hinzufügen und den entsprechenden Namespace angeben müssen, um den Verwaltungsdienst verwenden zu können.

StreamInsight verwendet Windows Communication Foundation (WCF) für die Webdienstschnittstelle. Eine umfassende Erläuterung der WCF-Konfiguration würde den Rahmen dieser Dokumentation sprengen. Beachten Sie jedoch die folgenden Punkte, wenn Sie den Webdienst verfügbar machen:

  • Die Bindung an die angegebene URL setzt voraus, dass die URL für das Benutzerkonto reserviert ist, das die Anwendung ausführt. Wenn die StreamInsight-Anwendung nicht mit Administratorrechten ausgeführt wird, muss der folgende Befehl in einer erhöhten Befehlsshell ausgeführt werden:

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

    Für die URL-Reservierung durch netsh muss ein Portname angegeben werden. Wählen Sie einen Port aus, der noch nicht verwendet wird. Mit dem folgenden Befehl können Sie die URLs auflisten, die gerade reserviert sind.

    netsh http show urlacl
    

    Beachten Sie, dass Platzhalter in der URL-Reservierung Auswirkungen auf den HostNameComparisonMode-Parameter in der Bindung haben. Der standardmäßige Abgleichungsmodus einer Bindung ist StrongWildcard. Beispiel: Wenn Sie die exakte Namensübereinstimmung von Hosts ermöglichen möchten ("localhost" wird in der Endpunktspezifikation des Servers verwendet, und nur lokale Clients können eine Verbindung herstellen), müssen Sie zunächst den entsprechenden Übereinstimmungsmodus festlegen:

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

    Wie alle anderen WCF-Eigenschaften kann auch diese in "app.config" angegeben werden.

    Außerdem müssen Sie den entsprechenden URL-Bereich reservieren. Verwenden Sie hierfür Platzhalter im netsh-Befehl:

    netsh http add urlacl url=https://localhost:8090/MyStreamInsightServer user=<domain\userid>
    
  • Im vorherigen Beispiel wird die Endpunktkonfiguration programmgesteuert angegeben. Alternativ kann der Endpunkt wie jede andere Anwendung, die auf WCF basiert, mit der Datei "app.config" konfiguriert werden. Der installierte StreamInsight-Dienst verwendet beispielsweise für jede registrierte Instanz eine solche deklarative Konfiguration. Der Name der Konfigurationsdatei lautet "StreamInsightHost.exe.config". Sie befindet sich im StreamInsight-Installationsordner unter "Host\<instance_name>".

  • Unter Microsoft Windows XP und Windows Server 2003 ist netsh nicht verfügbar. Stattdessen müssen Sie die Supporttools von Windows Server 2003 installieren und den httpcfg-Befehl von "<Laufwerk>:Programme\Support Tools" verwenden, um URLs zu reservieren. Der Befehl zum Reservieren einer Platzhalter-URL für das Netzwerkdienstkonto lautet beispielsweise:

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

Wenn Sie den Webdienst für Verbindungen netzwerkweit verfügbar machen, beachten Sie die folgenden spezifischen Informationen.

  • Der installierte StreamInsight-Dienst ermöglicht standardmäßig nur lokale Verbindungen. Wenn der Webdienst des installierten Diensts auf anderen Computern als auf "localhost" verfügbar gemacht werden soll, müssen Sie die bereits erläuterten Schritte folgendermaßen anwenden:

    1. Ändern Sie die URL-Reservierung für den Dienst vom expliziten "localhost" in den Platzhalter "+" um.

    2. Ändern Sie die Hostnamensübereinstimmung in "app.config" des Diensts in StrongWildcard um.

  • Wenn Sie Remoteverbindungen aktivieren, muss der angegebene Port in der Firewall des Servers geöffnet werden.

  • Wenn Sie einen Client über den Computernamen netzwerkweit mit einer Remoteserverinstanz verbinden, wird bei Verwendung der IP-Adresse Kerberos anstatt NTLM für die Authentifizierung verwendet. Das heißt, dass der Client eine UPN (User Principal Name)-Identität für den Endpunkt festlegen muss, bevor eine Verbindung hergestellt wird:

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

Weitere Informationen zum Angeben von Endpunkten finden Sie in der WCF-Dokumentation.

Siehe auch

Konzepte

Überwachen von StreamInsight-Server und -Abfragen

Verwenden des StreamInsight-Ereignisflussdebuggers

StreamInsight-End-to-End-Beispiel

Änderungsverlauf

Aktualisierter Inhalt

Die Codebeispiele wurden korrigiert, und in den Abschnitt "Verfügbarmachen des Serverendpunkts" wurden neue Informationen aufgenommen.