Прокси-сервер службы
Прокси-сервер службы — это прокси-сервер на стороне клиента для службы. Прокси-сервер службы позволяет приложениям отправлять и получать сообщения через канал в виде вызовов методов.
Прокси-серверы служб создаются по мере необходимости, открываются, используются для вызова службы и закрываются, когда они больше не нужны. Кроме того, приложение может повторно использовать прокси-сервер службы для многократного подключения к той же службе без затрат времени и ресурсов, необходимых для инициализации прокси-сервера службы более одного раза. На следующей схеме показан поток возможных состояний прокси-сервера службы и вызовов функций или событий, которые ведут из одного состояния в другое.
Эти состояния прокси службы перечисляются в перечислении WS_SERVICE_PROXY_STATE .
Как показано на предыдущей схеме и следующем коде, прокси-сервер службы создается путем вызова функции WsCreateServiceProxy . В качестве параметров для этого вызова WWSAPI предоставляет следующие перечисления:
Он также принимает необязательные параметры, используя следующие типы данных:
После создания прокси-сервера службы функция WsCreateServiceProxy возвращает ссылку на прокси-сервер службы , WS_SERVICE_PROXY, с помощью параметра out.
WS_SERVICE_PROXY* serviceProxy = NULL;
hr = WsCreateServiceProxy (
WS_TCP_CHANNEL_BINDING,
WS_CHANNEL_TYPE_DUPLEX_SESSION,
NULL,
NULL,
0,
NULL,
0,
&serviceProxy,
error);
После создания прокси-сервера службы приложение может открыть прокси-сервер службы для связи со службой, вызвав функцию WsOpenServiceProxy , передав структуру адресов , содержащую сетевой адрес конечной точки службы для подключения.
WS_ENDPOINT_ADDRESS address = {0};
address.uri.chars = "net.tcp://localhost/example";
address.uri.length = wcslen("net.tcp://localhost/example";);
hr = WsOpenServiceProxy(serviceProxy, &address, NULL, error);
После открытия прокси-сервера службы приложение может использовать его для выполнения вызовов к службе.
hr = Add(
serviceProxy,
1,
2,
&result,
NULL,
0,
NULL,
error);
Когда приложению больше не нужен прокси-сервер службы, он закрывается путем вызова функции WsCloseServiceProxy . Он также освобождает связанную память, вызывая WsFreeServiceProxy.
hr = WsCloseServiceProxy(
serviceProxy,
NULL,
error);
hr = WsFreeServiceProxy(
serviceProxy,
error);
Повторное использование прокси-сервера службы
Кроме того, после вызова WsCloseServiceProxy приложение может повторно использовать прокси-сервер службы, вызвав функцию WsResetServiceProxy .
hr = WsResetServiceProxy(
serviceProxy,
error);
Дополнительные сведения об использовании прокси-серверов службы в разных контекстах см. в следующих разделах:
- Прокси-сервер службы и сеансы
- Операция службы
- Операции службы на стороне клиента
- HttpCalculatorClientExample
Безопасность
При использовании API прокси-сервера службы WWSAPI следует внимательно учитывать следующие рекомендации по проектированию приложений:
- Прокси-сервер службы не будет выполнять проверку данных за пределами базовой проверки профиля 2.0 и XML-сериализации. Приложение отвечает за проверку данных, содержащихся в параметрах, которые оно получает в ходе вызова.
- Настройка максимального числа ожидающих вызовов на прокси-сервере службы с помощью значения перечисления WS_PROXY_PROPERTY_IDWS_PROXY_PROPERTY_MAX_PENDING_CALLS обеспечивает защиту от медленно работающего сервера. Максимальное значение по умолчанию — 100. Приложения должны быть осторожны при изменении значений по умолчанию.
- Прокси-сервер службы не предоставляет никаких гарантий безопасности, кроме тех, которые указаны в WS_SECURITY_DESCRIPTION структуре, используемой для взаимодействия с сервером.
- Следите за изменением значений по умолчанию для сообщений и каналов на прокси-сервере службы. Ознакомьтесь с рекомендациями по безопасности, связанными с сообщениями и каналами, прежде чем изменять какие-либо связанные свойства.
- Прокси-сервер службы шифрует все учетные данные, которые хранятся в памяти.
Следующие элементы API относятся к прокси-службам.
Обратный вызов | Описание |
---|---|
WS_PROXY_MESSAGE_CALLBACK | Вызывается при отправке заголовков входного сообщения или при получении заголовков выходного сообщения. |
Перечисление | Описание |
---|---|
WS_CALL_PROPERTY_ID | Перечисляет необязательные параметры для настройки вызова операции службы на стороне клиента. |
WS_PROXY_PROPERTY_ID | Перечисляет необязательные параметры для настройки прокси-сервера службы. |
WS_SERVICE_PROXY_STATE | Состояние прокси-сервера службы. |
Функция | Описание |
---|---|
WsAbandonCall | Отменяет указанный вызов на указанном прокси-сервере службы. |
WsAbortServiceProxy | Отменяет все ожидающие входные и выходные данные на указанном прокси-сервере службы. |
WsCall | Только для внутреннего использования. Сериализует аргументы в сообщение и отправляет его по каналу. |
WsCloseServiceProxy | Закрывает прокси-сервер службы для обмена данными. |
WsCreateServiceProxy | Создает прокси-сервер службы. |
WsFreeServiceProxy | Освобождает память, связанную с прокси-сервером службы. |
WsGetServiceProxyProperty | Извлекает указанное свойство прокси-сервера службы. |
WsOpenServiceProxy | Открывает прокси-сервер службы для конечной точки службы. |
WsResetServiceProxy | Сбрасывает прокси-сервер службы. |
Handle | Описание |
---|---|
WS_SERVICE_PROXY | Непрозрачный тип, используемый для ссылки на прокси-сервер службы. |
Структура | Описание |
---|---|
WS_CALL_PROPERTY | Задает свойство вызова. |
WS_PROXY_PROPERTY. | Указывает свойство прокси-сервера. |