Асинхронные службы используют шаблон взаимодействия обратного вызова для коммуникаций между
объектами. Асинхронные службы могут использоваться, например, в системах публикация-подписка,
предоставленных поставщиками промежуточного программного обеспечения, ориентированного на сообщения, или в
доменах управления системами и устройствами.
Службы WS-Notification
Асинхронные службы стандартизованы в спецификациях
WS-Notification:
- WS-BaseNotification определяет интерфейсы веб-служб для
NotificationProducers и NotificationConsumers.
Эта спецификация включает
стандартные обмены сообщениями, реализованные поставщиками служб, желающими выполнять эти роли, а также
связанные с ними операционные требования.
- WS-BrokeredNotification определяет интерфейс веб-служб для
NotificationBroker. NotificationBroker - это посредник, который, среди прочего, позволяет
работать с объектами, которые не являются самими поставщиками служб, для публикации сообщений. Он включает
в себя стандартные обмены сообщениями, реализованные поставщиками служб NotificationBroker, а также
связанные с ними операционные требования к поставщикам и клиентам служб, участвующих в применяемых
уведомлениях.
- WS-Topics определяет механизм организации и категоризации интересующих элементов для
подписки, называемых темами. Они используются в сочетании с механизмами уведомления,
определенными в WS-BaseNotification и WS-BrokeredNotification.
Можно протестировать
веб-службы и службы XML, реализующие спецификацию WS-Notification, путем создания асинхронного запроса в
тесте. Асинхронный запрос содержит интерфейсы для соответствующей спецификации WS-Notification вместе со
структурой обратного вызова.
Частные асинхронные службы
Можно протестировать частные асинхронные службы,
которые не реализуют спецификацию WS-Notification. Для тестирования этих служб необходимо вручную создать
запрос к службе, содержащий интерфейсы для службы, а затем можно добавить к запросу асинхронную структуру
обратного вызова.
Данные XML асинхронного запроса должны содержать конечную точку, определяющую URL
получателя обратного вызова. В процессе выполнения теста эта конечная точка используется для
перенаправления обратного вызова тестировщику вместо реального получателя.
Структура обратного вызова
Для тестирования асинхронных служб необходимо создать
асинхронную структуру запроса в тесте как показано на следующей диаграмме:
Запрос к веб-службе или простой запрос XML предоставляет действие подписки и
содержит элемент обратного вызова, описывающий поведение теста в трех состояниях:
- Параллельный содержит элементы теста, выполняемые после запроса на подписку и во время
ожидания ответа уведомления.
- Получение содержит элементы теста, выполняемые при получении из службы ответа
уведомления.
- Тайм-аут содержит элементы теста, выполняемые, если ответ уведомления не получен после
задержки, указанной в элементе обратного вызова.
Когда завершено выполнение всего, что
содержится в элементах "параллельный", "получение" и "тайм-аут", выполнение продолжается в следующем
элементе теста после асинхронного запроса.
Метод генерации асинхронной структуры обратного вызова в
тесте зависит от того, использует ли асинхронная служба спецификацию WS-Notification:
- Службы WS-Notification: Создайте асинхронный запрос в тесте.
- Частные службы: Вручную создайте запрос к веб-службе или запрос XML в тесте, а затем добавьте
асинхронную структуру обратного вызова к запросу.