Publication et connexion au serveur StreamInsight

Dans une application StreamInsight, vous pouvez choisir d'incorporer le serveur StreamInsight intra-processus ou de vous connecter à un serveur distant. Dans les deux cas, vous utilisez un objet serveur pour développer des requêtes StreamInsight. Pour se connecter à une instance distante, il doit héberger le serveur StreamInsight et exposer l'interface de gestion du service Web.

Connexion à un serveur

Dans le cas d'un hébergement intra-processus, le serveur StreamInsight est créé via l'appel suivant :

    Server server = Server.Create(…);

L'application StreamInsight peut également se connecter à un serveur existant qui s'exécute en tant que processus séparé. Dans l'exemple suivant, une application cliente se connecte à un serveur identifié par une adresse de point d'arrêt spécifique.

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

Dans cet exemple, la connexion s'effectue sur un service StreamInsight installé, avec le nom d'instance « MyInstance ». Pour se connecter à un serveur StreamInsight (service installé ou application serveur personnalisée), l'utilisateur doit faire partie du groupe correspondant à l'instance de serveur. Pour plus d'informations sur ce groupe et le service StreamInsight, consultez Installation (StreamInsight).

Exposition du point d'arrêt de serveur

Pour que la méthode Connect() réussisse, le serveur doit exposer son interface de gestion via un point d'arrêt de service Web à l'URI (Uniform Resource Identifier) donné. Par exemple, le débogueur de flux d'événements StreamInsight est une application cliente qui, si connectée à un point d'arrêt d'un serveur de production, peut récupérer les informations de diagnostic des requêtes et d'autres objets de niveau serveur ou enregistrer les événements d'une requête en cours d'exécution en vue d'un débogage ultérieur.

Une application peut exposer l'interface de gestion d'un serveur StreamInsight hébergé en ajoutant un point d'arrêt de service Web comme indiqué dans l'exemple suivant. L'exemple suppose l'existence d'une instance de StreamInsight enregistrée et nommée « 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;

Vous êtes tenu d'ajouter une référence à Microsoft.ComplexEventProcessing.ManagementService.dll et spécifier l'espace de noms correspondant afin de tirer parti du service de gestion.

StreamInsight utilise Windows Communication Foundation (WCF) pour son interface de service Web. La description complète de la configuration WCF dépasse l'objet de cette documentation. Vous pouvez, cependant, tenir compte des points suivants lors de l'exposition du service Web :

  • Pour établir la liaison à l'URL spécifiée, il est nécessaire de réserver cette URL pour le compte d'utilisateur qui exécute l'application. Si l'application StreamInsight n'est pas exécutée avec des droits d'administrateur, vous devez exécuter la commande suivante dans une fenêtre d'invite de commandes avec des privilèges élevés :

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

    La réservation d'URL au moyen de netsh requiert toujours un nom de port. Choisissez un port qui n'a pas déjà été utilisé. Servez-vous de la commande suivante pour répertorier les URL actuellement réservées.

    netsh http show urlacl
    

    Notez que l'utilisation de caractères génériques dans la réservation d'URL a un impact sur le paramètre HostNameComparisonMode dans la liaison. Le mode de correspondance par défaut d'une liaison est StrongWildcard. Si vous souhaitez, par exemple, effectuer une correspondance de noms d'hôte (en utilisant « localhost » dans la spécification du point de terminaison du serveur, tout en laissant la possibilité aux clients locaux de se connecter), vous devez commencer par définir le mode de correspondance :

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

    Comme toute autre propriété WCF, ce mode peut également être spécifié dans le fichier app.config.

    Vous devez ensuite réserver l'étendue d'URL correspondante en utilisant la commande netsh :

    netsh http add urlacl url=https://localhost:8090/MyStreamInsightServer user=<domain\userid>
    
  • Dans l'exemple précédent, la configuration du point d'arrêt est spécifiée par programme. Le point d'arrêt peut également être configuré via un fichier app.config, comme toute autre application basée sur WCF. Le service StreamInsight installé utilise, par exemple, cette configuration déclarative pour chaque instance enregistrée. Le fichier de configuration se trouve dans le dossier d'installation de StreamInsight sous Hôte\\<instance_name> et se nomme StreamInsightHost.exe.config.

  • Sous Windows XP et Windows Server 2003, netsh n'est pas disponible. Cela signifie que vous devez installer les outils de support Windows Server 2003 et utiliser la commande httpcfg à partir de « <lecteur>:Program Files\Support Tools\ » pour réserver des URL. Voici, par exemple, la commande permettant de réserver une URL générique pour le compte de service réseau :

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

Lorsque vous exposez le service Web pour les connexions sur le réseau, tenez compte des informations spécifiques suivantes.

  • Le service StreamInsight installé n'autorise que les connexions locales par défaut. Lorsque vous devez exposer le service Web du service installé aux ordinateurs autres que localhost, vous devez suivre les étapes décrites précédemment pour :

    1. Remplacer la réservation d'URL pour le service définie sur le « localhost » explicite par le caractère générique « + ».

    2. Remplacer la correspondance de noms d'hôte dans le fichier app.config du service par StrongWildcard.

  • Si vous acceptez des connexions distantes, le port spécifié doit être ouvert dans le pare-feu du serveur.

  • Lorsqu'un client se connecte à une instance de serveur distante sur le réseau à l'aide du nom de l'ordinateur, le mode d'authentification appliqué est Kerberos au lieu de NTLM en cas d'utilisation de l'adresse IP. Le client a donc besoin de définir une identité UPN (User Principal Name) pour le point de terminaison avant d'établir la connexion :

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

Consultez la documentation WCF pour obtenir plus de détails sur la spécification des points de terminaison.

Voir aussi

Concepts

Contrôle du serveur et des requêtes StreamInsight

Utilisation du débogueur de flux d'événements StreamInsight

Exemple StreamInsight de bout en bout

Historique des modifications

Mise à jour du contenu

Correction des exemples de code et ajout de nouvelles informations dans la section « Exposition du point d'arrêt de serveur ».