Publicando e conectando ao servidor StreamInsight
Em um aplicativo StreamInsight, você pode optar por inserir o servidor StreamInsight em processo ou conectar-se a um servidor remoto. Em ambos os casos, você usa um objeto de servidor para desenvolver consultas do StreamInsight. Para conectar a uma instância remota, é necessário que ela hospede o servidor StreamInsight e exponha a interface de capacidade de gerenciamento do serviço Web.
Conectando a um servidor
Quando hospedado em processo, o servidor StreamInsight é criado através da seguinte chamada:
Server server = Server.Create(…);
Outra alternativa é a conexão do aplicativo StreamInsight a um servidor existente que é executado como um processo separado. No exemplo a seguir, um aplicativo cliente conecta-se a um servidor identificado por um endereço de ponto de extremidade específico.
Server server = Server.Connect(new System.ServiceModel.EndpointAddress(@"https://localhost/StreamInsight/MyInstance"));
Esse exemplo se conecta a um serviço do StreamInsight instalado com o nome de instância "MyInstance". Observe que, para se conectar a um servidor do StreamInsight (um serviço instalado ou seu aplicativo de servidor personalizado), o usuário da conexão deve estar no grupo correspondente à instância do servidor. Para obter mais informações sobre o grupo e o serviço do StreamInsight, consulte Instalação (StreamInsight).
Expondo o ponto de extremidade do servidor
Para que o método Connect() tenha êxito, o servidor deve expor sua interface de capacidade de gerenciamento por meio de um ponto de extremidade do serviço Web no URI (Uniform Resource Identifier) especificado. Por exemplo, o Depurador de Fluxo de Eventos do StreamInsight é um aplicativo cliente que, quando conectado a um ponto de extremidade de um servidor ativo, pode recuperar informações de diagnóstico sobre consultas e outros objetos em nível de servidor ou registrar eventos de uma consulta em execução para depuração adicional.
Um aplicativo pode expor a interface de capacidade de gerenciamento de um servidor StreamInsight hospedado adicionando um ponto de extremidade do serviço Web, conforme mostrado no exemplo a seguir. O exemplo supõe que exista uma instância do StreamInsight registrada chamada "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;
Observe que você deve adicionar uma referência a Microsoft.ComplexEventProcessing.ManagementService.dll e especificar o namespace correspondente para poder usar o Serviço de Gerenciamento.
StreamInsight usa o WCF (Windows Communication Foundation) para a interface de serviço Web. O escopo desta documentação não inclui uma discussão detalhada da configuração do WCF, mas leva em consideração os seguintes pontos durante a exposição do serviço Web:
A associação à URL especificada exige a reserva da URL para a conta de usuário que executa o aplicativo. Se o aplicativo StreamInsight não for executado com os direitos de administrador, o seguinte comando deverá ser executado em um shell de comandos elevado:
netsh http add urlacl url=http://+:8090/MyStreamInsightServer user=<domain\userid>
A reserva da URL por meio de netsh sempre exige um nome de porta. Escolha uma porta que ainda não tenha sido usada. Use o comando a seguir para listar as URLs reservadas no momento.
netsh http show urlacl
Observe que o uso de curingas na reserva de URL tem um impacto no parâmetro HostNameComparisonMode da associação. O modo correspondente padrão de uma associação é StrongWildcard. Se, por exemplo, você se quiser habilitar a correspondência exata de nome de host (usando "localhost" na especificação de ponto de extremidade do e permitindo que somente clientes locais se conectem), você deverá primeiro definir o modo de correspondência associado:
WSHttpBinding binding = new WSHttpBinding(SecurityMode.Message); binding.HostNameComparisonMode = HostNameComparisonMode.Exact; host.AddServiceEndpoint(typeof(IManagementService), binding, "https://localhost:8090/MyStreamInsightServer");
Como qualquer outra propriedade WCF, essa também pode ser especificada no app.config.
Em seguida, você também deve reservar o escopo da URL correspondente usando o comando netsh:
netsh http add urlacl url=https://localhost:8090/MyStreamInsightServer user=<domain\userid>
No exemplo anterior, a configuração do ponto de extremidade é especificada programaticamente. Como alternativa, o ponto de extremidade pode ser configurado por meio de um arquivo app.config, como qualquer outro aplicativo baseado no WCF. O serviço do StreamInsight instalado, por exemplo, usa essa configuração declarativa para cada instância registrada. O arquivo de configuração se encontra na pasta de instalação do StreamInsight, em Host \<instance_name>, denominado StreamInsightHost.exe.config.
No Microsoft Windows XP e no Windows Server 2003, netsh não está disponível. Em seu lugar, você deve instalar as ferramentas de suporte do Windows Server 2003 e usar o comando httpcfg em "<unidade>:Arquivos de Programas\Ferramentas de Suporte\" para reservar URLs. Por exemplo, o comando para reservar uma URL curinga para a conta de serviço de rede é:
httpcfg set urlacl /u http://+:80/StreamInsight/MyStreamInsightServer /a "D:(A;;GX;;;NS)"
Ao expor o serviço Web para conexões em toda a rede, leve em consideração as informações específicas a seguir.
O serviço StreamInsight instalado só permite conexões locais por padrão. Quando você precisar expor o serviço Web do serviço instalado a computadores que não sejam o localhost, deverá seguir as etapas descritas acima para:
Alterar a reserva de URL para o serviço do "localhost" explícito para o curinga "+".
Alterar a correspondência de nome de host no app.config do serviço para StrongWildcard.
Durante a habilitação de conexões remotas, a porta especificada deve ser aberta no firewall do servidor.
Durante a conexão de um cliente com uma instância de servidor remota na rede usando o nome do computador, o Kerberos é usado na autenticação no lugar de NTLM quando é usado o endereço IP. Isso significa que o cliente precisa definir uma identidade UPN para o ponto de extremidade antes da conexão:
EndpointIdentity ei = EndpointIdentity.CreateUpnIdentity(WindowsIdentity.GetCurrent().Name); EndpointAddress ea = new EndpointAddress(new Uri(@"http://machinename:8090/MyStreamInsightServer"), ei, (AddressHeaderCollection)null); server = Server.Connect(ea);
Consulte a documentação do WCF para obter mais detalhes sobre a especificação de pontos de extremidade.
Consulte também
Conceitos
Monitorando o servidor StreamInsight e as consultas
Usando o depurador do fluxo de eventos do StreamInsight
Exemplo ponta a ponta do StreamInsight
Histórico de alterações
Conteúdo atualizado |
---|
Corrigidos os exemplos de código e adicionadas novas informações na seção "Expondo o ponto de extremidade do servidor". |