Публикация и соединение с сервером служб 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, необходимо выполнить описанные выше действия, чтобы:
изменить резервирование URL-адресов для службы с явного «localhost» на шаблон «+»;
изменить сопоставление имени хоста в файле 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
Журнал изменений
Обновленное содержимое |
---|
Исправлены примеры кода и добавлены новые сведения в раздел «Предоставление доступа к конечной точке сервера». |