Вопрос

В наши дни наше приложение взаимодействует со многими веб-сервисами. У нас есть собственный пакет, который кто-то написал несколько лет назад с использованием UTL_HTTP, и он, как правило, работает, но требует некоторого жесткого кодирования конверта SOAP для работы с определенными системами. Я хотел бы сделать его более общим, но мне не хватает опыта, чтобы знать, сколько сценариев мне придется иметь дело. Различия в том, какие пространства имен должны быть объявлены, и формат элементов. Мы должны обрабатывать как простые вызовы с несколькими параметрами, так и те, которые передают большой объем данных в закодированной строке.

Я знаю, что в 10g есть UTL_DBWS, но в интернете не так много вариантов использования. Является ли он стабильным и достаточно гибким для общего использования? Документация

Это было полезно?

Решение

Я использовал UTL_HTTP , который прост и работает. Если вы столкнулись с проблемой с вашим собственным пакетом, вы, вероятно, можете найти решение в одном из множества пакетов-оберток вокруг UTL_HTTP в сети (Google "использует веб-сервисы из pl / sql"), что приводит вас, например, к. http://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php )

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

Другие советы

У меня была эта проблема, и я нашел и установил пакет «SOAP API», который Стен предлагает в Oracle-Base. Он обеспечивает некоторые хорошие возможности создания конвертов поверх UTL_HTTP.

Однако были некоторые ограничения, относящиеся к вашему вопросу. SOAP_API предполагает, что все запросы являются простыми XML, т. Е. Только одна иерархия тегов слоя.

Я расширил пакет SOAP_API, чтобы позволить клиентскому коду произвольно вставить дополнительный тег. Таким образом, вы можете вставить подуровень, например, продолжить построение запроса и не забудьте вставить закрывающий тег.

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

Хорошим инструментом отладки, который я использовал, является TCP Trace от Pocket Soap. www.pocketsoap.com/tcptrace/ Вы настраиваете его как прокси и наблюдаете объекты HTTP-запросов и ответов между кодом клиента и сервера.

Сказав все это, нам действительно нравится иметь SOAP-клиент в базе данных - у нас есть полный доступ ко всем данным и существующему коду PLSQL, мы можем легко переключаться между курсорами и при необходимости вызывать внешнее приложение через SOAP. Это было намного быстрее и проще, чем развертывание среднего уровня с большим количеством пользовательского кода Java или .NET. Удачи, и дайте мне знать, если вы хотите увидеть мой улучшенный код SOAP API.

Мы также использовали UTL_HTTP аналогично тому, что вы описали. У меня нет прямого опыта работы с UTL_DBWS, поэтому я надеюсь, что вы сможете получить любую информацию / опыт, которые сможете собрать.

@kogus, нет, это довольно хороший дизайн для многих приложений. PL / SQL - это полноценный язык программирования, который использовался во многих крупных приложениях.

Ознакомьтесь с этим старым сообщением . Я должен согласиться с ответом # 1 этого поста; Трудно представить сценарий, в котором это может быть хорошим дизайном.

Разве вы не можете написать службу или отдельное приложение, которое будет взаимодействовать с таблицей в вашей базе данных? Тогда вы можете реализовать все, что захотите, в качестве триггера для этой таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top