Поделиться через


Публикация и соединение с сервером служб StreamInsight

В приложении StreamInsight можно внедрить сервер StreamInsight внутрипроцессно или подключаться к удаленному серверу. В обоих случаях серверный объект используется для разработки запросов StreamInsight. Для подключения к удаленному экземпляру на нем должен размещаться сервер StreamInsight и быть доступен интерфейс управления веб-службой.

Соединение с сервером

Если сервер StreamInsight размещается внутрипроцессно, то он создается следующим вызовом метода:

    Server server = Server.Create(…);

Кроме того, приложение StreamInsight может также подключаться к существующему серверу, запущенному в качестве отдельного процесса. В следующем примере клиентское приложение подключается к серверу, который определяется по адресу конечной точки.

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

В этом примере выполняется подключение к установленной службе StreamInsight с именем экземпляра MyInstance. Обратите внимание, что для соединения с любым сервером StreamInsight (к установленной службе или своему приложению на сервере) пользователь должен входить в группу, соответствующую экземпляру сервера. Дополнительные сведения об этой группе и о службе StreamInsight см. в разделе Установка (StreamInsight).

Предоставление доступа к конечной точке сервера

Для успешной работы метода Connect() сервер должен предоставлять доступ к интерфейсу управления через конечную точку веб-службы по заданному URI. Например, отладчик потока событий StreamInsight представляет клиентское приложение, которое в случае подключения к конечной точке активного сервера может получать диагностические данные о запросах и других объектах уровня сервера или записывать события из выполняющегося запроса для дальнейшей отладки.

Приложение может предоставлять доступ к интерфейсу управления размещаемого сервера StreamInsight путем добавления конечной точки веб-службы, как показано в следующем примере. В примере предполагается, что существует зарегистрированный экземпляр StreamInsight с именем 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;

Обратите внимание, что для использования службы управления необходимо добавить ссылку на сборку Microsoft.ComplexEventProcessing.ManagementService.dll и указать соответствующее пространство имен.

StreamInsight использует в качестве интерфейса веб-службы Windows Communication Foundation (WCF). Полное описание конфигурации WCF выходит за рамки данной документации, однако при предоставлении доступа к веб-службе нужно учитывать следующие моменты.

  • Привязка к заданному URL-адресу требует, чтоб он был зарезервирован для учетной записи пользователя, выполняющего приложение. Если приложение StreamInsight не выполняется с правами администратора, то в командной строке нужно выполнить следующую команду с повышенными разрешениями:

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

    Резервирование URL-адреса через netsh всегда требует указания имени порта. Выберите порт, который еще не используется. Следующая команда выводит список URL-адресов, зарезервированных в настоящее время.

    netsh http show urlacl
    

    Обратите внимание, что использование символов-шаблонов в резервировании URL-адреса влияет на параметр HostNameComparisonMode в привязке. По умолчанию в привязке используется режим сопоставления StrongWildcard. Например, если нужно разрешить точное сопоставление по имени хоста (с использованием «localhost» в качестве конечной точки сервера, когда подключаться смогут только локальные клиенты), то нужно сначала задать соответствующий режим сопоставления:

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

    Подобно другим свойствам WCF, это свойство можно задавать в файле app.config.

    Затем необходимо зарезервировать соответствующую область URL-адреса в команде netsh:

    netsh http add urlacl url=https://localhost:8090/MyStreamInsightServer user=<domain\userid>
    
  • В предыдущем примере конфигурация конечной точки задается программным образом. Можно также настроить конечную точку app.config, как и в любом другом приложении на основе WCF. Установленная служба StreamInsight, например, использует подобную декларативную конфигурацию для каждого зарегистрированного экземпляра. Файл конфигурации находится в папке установки StreamInsight в каталоге Host\<instance_name> и имеет имя StreamInsightHost.exe.config.

  • В Windows XP и Windows Server 2003 команда netsh недоступна. Вместо этого для резервирования URL-адресов необходимо установить средства поддержки Windows Server 2003 и выполнить команду httpcfg из папки «<диск>:Program Files\Support Tools\». Например, следующая команда выполняет резервирование URL-адреса с символом-шаблоном для учетной записи сетевой службы:

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

При предоставлении доступа к веб-службе, доступной через сеть, следует учитывать некоторые специфические моменты.

  • По умолчанию установленная служба StreamInsight разрешает только локальные соединения. Если веб-служба установленной службы должна быть доступной для компьютеров, отличных от localhost, необходимо выполнить описанные выше действия, чтобы:

    1. изменить резервирование URL-адресов для службы с явного «localhost» на шаблон «+»;

    2. изменить сопоставление имени хоста в файле app.config службы на StrongWildcard.

  • Если удаленные соединения разрешены, то указанный порт должен быть открыт в брандмауэре сервера.

  • При соединении клиента с экземпляром удаленного сервера через сеть по имени компьютера при указании IP-адреса для проверки подлинности используется протокол Kerberos, а не NTLM. Это означает, что перед соединением клиенту необходимо удостоверение имени участника-пользователя для конечной точки:

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

Дополнительные сведения об указании конечных точек см. в документации по WCF.

См. также

Основные понятия

Наблюдение за сервером служб StreamInsight и запросами

Использование отладчика потока событий StreamInsight

Законченный пример StreamInsight

Журнал изменений

Обновленное содержимое

Исправлены примеры кода и добавлены новые сведения в раздел «Предоставление доступа к конечной точке сервера».