Использование веб-сервисов из Oracle PL/SQL

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

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


person steevc    schedule 01.09.2008    source источник


Ответы (4)


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

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

person Sten Vesterli    schedule 15.09.2008

У меня была эта проблема, и я нашел и установил пакет «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.

person Rob McCauley    schedule 24.01.2009

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

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

person Mark Harrison    schedule 02.09.2008

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

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

person JosephStyons    schedule 02.09.2008
comment
Ответ № 1 — это инструкции, как это сделать в dotNet. Не совсем актуально. Вы имеете в виду комментарий Ориона Эдвардса от 29 августа? Помните, что ответы могут перемещаться вверх/вниз по списку по мере того, как люди ранжируют их. - person Gary Myers; 26.01.2009