Могу ли я проверить, поддерживает ли веб-служба SOAP определенный веб-метод?
-
01-07-2019 - |
Вопрос
Наши веб-сервисы распределены по разным серверам по разным причинам (например, для уменьшения времени ожидания клиента), и они не всегда актуальны.Вместо того, чтобы выдавать исключение, когда метод не делает поскольку конкретная веб-служба слишком старая, было бы лучше, если бы мы могли попросить клиента проверить, отвечает ли служба на данный метод, прежде чем вызывать его, и в противном случае отключить эту функцию (или обойти ее).
Есть ли способ сделать это?
Решение
Модульное тестирование веб-службы, чтобы убедиться, что ее подписи не нарушаются.Когда вы напишете код, который нарушает сигнатуру метода, вы узнаете об этом и сможете соответствующим образом настроить другие приложения.
Или просто не взламывайте веб-сервисы и публикуйте их таким образом, чтобы вы могли их версифицировать.Как в http://services.domain.com/MyService/V1.1/Service.asmx (для .NET) таким образом, ваши приложения, использующие версию v1.1, не будут ломаться, когда вы опубликуете версию v1.2 и внесете критические изменения.
Я бы также проверил использование внутреннего UDDI-сервера, если это действительно такая сложная задача для управления вашими веб-сервисами.Используя Зеленые страницы UDDI, вы узнаете все, что вы хотите знать о сервисе.
Другие советы
Получите WSDL (добавьте ?wsdl к URL-адресу) - вы можете разобрать его любым удобным для вас способом.
Когда вы делаете запрос SOAP, вы просто отправляете HTTP-запрос на сервер.Если сервер поймет это, он ответит HTTP 200 и немного XML обратно, если нет, он отправит вам некоторый HTTP-код ошибки (404, 500, ...)
Не существует общего способа запросить существование "метода", предоставляемого веб-службой.Попробуйте использовать открытый WSDL, если он автоматический, или просто попробуйте использовать "метод" и проверьте наличие ошибки в ответе (вам не нужно отправлять исключение пользователю ...)
Кроме того, я не знаю, хорошо ли я вас понял, но вы подумываете о том, чтобы дважды запросить сервер, один раз, чтобы проверить, существует ли метод, и второй, чтобы фактически вызвать его, если он существует?Я бы просто проверил наличие ошибки, если это не так, и действовал бы нормально, если бы это произошло.