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


Узел службы

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

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

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

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

Перед созданием узла службы необходимо определить конечные точки службы. Конечная точка в узле службы указывается в структуре 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 Сбрасывает узел службы для повторного использования и сбрасывает базовый канал и прослушиватели для повторного использования.

 

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

 

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