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


Узел службы

Узел службы — это среда выполнения для размещения службы в рамках процесса.

Служба может настроить одну или несколько конечных точек внутри узла службы.

Схема, показывающая структуру узла службы, содержащего конечную точку службы.

Создание узла службы

Перед созданием узла службы служба должна определить свои конечные точки. Конечная точка в узле службы указывается в структуре WS_SERVICE_ENDPOINT и определяется следующими сведениями:

  • Адрес, представляющий собой физический универсальный код ресурса (URI), на котором будет размещена служба.
  • Структура WS_CHANNEL_TYPE , указывающая тип базового канала для конечной точки.
  • Структура WS_CHANNEL_BINDING , задающая привязку канала.
  • Структура WS_SECURITY_DESCRIPTION , содержащая описание безопасности для конечной точки.
  • Структура WS_SERVICE_CONTRACT , представляющая контракт службы для конечной точки.
  • Структура WS_SERVICE_SECURITY_CALLBACK , указывающая функцию обратного вызова авторизации для конечной точки.
  • Структура WS_SERVICE_ENDPOINT_PROPERTY , содержащая массив свойств конечной точки службы.
WS_SERVICE_ENDPOINT serviceEndpoint = {0};
const WS_SERVICE_ENDPOINT* serviceEndpoints[1];
serviceEndpoints[0] = &serviceEndpoint;
WS_STRING url = WS_STRING_VALUE(L"net.tcp://+/Example");

// Method based service contract for the service
static WS_SERVICE_CONTRACT calculatorContract = 
{
    &calculatorContractDescription, // comes from a generated header.
    NULL,
    &calculatorFunctions, // specified by the application
};

serviceEndpoint.address.url = &url;
serviceEndpoint.binding.channelBinding =  WS_TCP_CHANNEL_BINDING; 
serviceEndpoint.contract = &calculatorContract;  
serviceEndpoint.channelType = WS_CHANNEL_TYPE_DUPLEX_SESSION; 
serviceEndpoint.authorizationCallback = AuthorizationCallback; // Authorization callback.

Для ПРОТОКОЛА SOAP по протоколу UDP поддерживаются только односторонние контракты, представленные WS_UDP_CHANNEL_BINDING в перечислении WS_CHANNEL_BINDING .

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

HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);

При необходимости приложение может предоставить WsCreateServiceHost массив свойств службы для настройки пользовательских параметров на узле службы.

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

WsOpenServiceHost(serviceHost, NULL, NULL);

После открытия узла службы приложение может закрыть его, если больше нет необходимых операций. Обратите внимание, что это не освобождает свои ресурсы и его можно повторно открыть с последующим вызовом WsResetServiceHost.

WsCloseServiceHost(serviceHost, NULL, NULL);

После закрытия узла службы приложение может сбросить узел службы для повторного использования.

WsResetServiceHost(serviceHost, NULL);

После завершения работы приложения с узлом службы оно может освободить ресурсы, связанные с узлом службы, вызвав функцию WsFreeServiceHost . Обратите внимание, что перед вызовом этой функции необходимо вызвать WsCloseServiceHost .

WsFreeServiceHost(serviceHost, NULL);

Сведения о присоединении настраиваемого состояния к узлу службы см. в разделе Пользовательское состояние узла.

Сведения об авторизации на узле службы для данной конечной точки см. в разделе Авторизация службы.

Сведения о реализации операций службы и контрактов служб для службы см. в разделах об операциях службы и контрактах служб.

Безопасность

Приложение может использовать следующие свойства для управления объемом ресурсов, выделяемых узлом службы от имени приложения:

Безопасные значения по умолчанию выбираются для каждого из этих свойств. Приложение должно быть осторожным, если оно хочет изменить эти свойства. Помимо указанных выше свойств, свойства канала, прослушивателя и сообщения также могут быть изменены приложением. Прежде чем изменять какие-либо из этих параметров, ознакомьтесь с рекомендациями по обеспечению безопасности этих компонентов.

Кроме того, при использовании API узла службы WWSAPI следует тщательно проанализировать следующие аспекты проектирования приложений:

  • При использовании MEX приложения должны быть осторожны, чтобы не раскрывать конфиденциальные данные. Чтобы устранить проблему, если характер данных, предоставляемых через MEX, является конфиденциальным, приложения могут настроить конечную точку MEX с безопасной привязкой, требующей по крайней мере проверки подлинности, и реализовать авторизацию как часть конечной точки с помощью WS_SERVICE_SECURITY_CALLBACK.
  • По умолчанию расширенные сведения об ошибках при сбоях отключены на узле службы с помощью свойства WS_SERVICE_PROPERTY_FAULT_DISCLOSURE . Приложение может отправлять полнофункционированные сведения об ошибке в рамках ошибки. Однако это может привести к раскрытию информации, поэтому рекомендуется изменять этот параметр только для сценариев отладки.
  • Помимо проверки, выполняемой для базового профиля 2.0 и сериализации XML, узел службы не выполняет проверку содержимого данных, полученного в рамках параметров операции службы. Приложение несет ответственность за самостоятельное выполнение всех проверок параметров.
  • Авторизация не реализуется как часть узла службы. Однако приложения могут реализовать собственную схему авторизации с помощью WS_SECURITY_DESCRIPTION и WS_SERVICE_SECURITY_CALLBACK.
  • Приложение несет ответственность за использование безопасных привязок в своей конечной точке. Узел службы не обеспечивает никакой безопасности, кроме того, что настроено на конечной точке.

Следующие элементы API используются с узлом службы.

Обратный вызов Описание
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK Вызывается, когда узел службы принимает канал в прослушивателе конечной точки.
WS_SERVICE_CLOSE_CHANNEL_CALLBACK Вызывается при закрытии или прерывании канала в конечной точке.

 

Перечисление Описание
WS_SERVICE_ENDPOINT_PROPERTY_ID Необязательные параметры для настройки WS_SERVICE_ENDPOINT.
WS_SERVICE_HOST_STATE Состояния, в которых может находиться узел службы.
WS_SERVICE_PROPERTY_ID Необязательные параметры для настройки узла службы.

 

Функция Описание
WsAbortServiceHost Прерывает и прекращает текущие операции на узле службы.
WsCloseServiceHost Закрывает все прослушиватели, чтобы клиент не принимал новые каналы.
WsCreateServiceHost Создает узел службы.
WsFreeServiceHost Освобождает память, связанную с объектом узла службы.
WsGetServiceHostProperty Извлекает указанное свойство узла службы.
WsOpenServiceHost Открывает узел службы для обмена данными и запускает прослушиватели на всех конечных точках.
WsResetServiceHost Сбрасывает узел службы для повторного использования и сбрасывает базовый канал и прослушиватели для повторного использования.

 

Handle Описание
WS_SERVICE_HOST Непрозрачный тип, используемый для ссылки на узел службы.

 

Структура Описание
WS_SERVICE_ENDPOINT Представляет отдельную конечную точку на узле службы.
WS_SERVICE_ENDPOINT_PROPERTY Задает параметр для конкретной службы.
WS_SERVICE_PROPERTY Задает параметр для конкретной службы.
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK Указывает обратный вызов, который вызывается при успешном приеме канала.
WS_SERVICE_PROPERTY_CLOSE_CALLBACK Указывает обратный вызов, который вызывается при закрытии канала.