Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сделать http-запрос из под ASE 11.9.x
|
|||
|---|---|---|---|
|
#18+
День добрый! Такая ситуация. Имеем старенький ASE 11.9.x. Есть клиент, которому на sql-запрос нужно вернуть данные, получаемые через web. Для этого на ASE сервере нужно выполнить http-запрос к определенному адресу, полученный результат распарсить и вернуть ответ. Подскажите, как лучше это сделать ? На ум приходит написать extended stored procedure, которой будем передавать URL, далее она будет скачивать нужную страницу, парсить и возвращать ответ. Может где уже есть готовые esp для этих целей ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2007, 14:06 |
|
||
|
Как сделать http-запрос из под ASE 11.9.x
|
|||
|---|---|---|---|
|
#18+
Сам разобрался, может кому будет интересно. Итак: Писать esp сложно. Нигде не найдешь ни документацию, ни примеров. Поэтому поступил так: Скачал программку wget под windows (http://wget.dotsrc.org/). Затем запускаю ее с помощью xp_cmdshell. wget скачивает xml-файлик и возвращает его в ase. Мне нужно вытащить из xml отдельные параметры. Для этого я использую хранимаю процедуру. По пути столкнулся с проблемой - для того, чтобы работать с результатами xp_cmdshell в хранимой процедуре нужно здорово поизвращаться. Основываясь на доке http://www.sybase.com/detail?id=1029418 и http://groups.google.ru/group/sybase.public.sqlserver.unix/browse_thread/thread/1c58ba1bfa2e30a3/0dc4e987e66994e4?lnk=st&q=&rnum=1&hl=ru#0dc4e987e66994e4 делаем вызов xp_cmdshell через rpc. Нигде, кстати не встречал описания как это делать на русском языке. Напишу сам: итак, для того, чтобы у нас заработал вызов через RPC необходимо включить Component Integration Services (CIS) делается это так : Код: plaintext далее ставим макс. кол-во соединений Код: plaintext Теперь нам необходимо задать имя сервера. По умолчанию ase себя никак не именует. Это можно увидеть, если в sqladvantage написать какую-нибудь левую команду, напр: Код: plaintext в ответ на это мы увидим Server Message: Number 195, Severity 15 Line 1: 'date' is not a recognized built-in function name. Прикрутим имя сервера: предположим, он будет называться "MARS". Зайдем в программку dsedit, и добавим новое имя - MARS с адресом 127.0.0.1,5000. Закроем dsedit. После этого выполним команду Код: plaintext local - это "класс" имени. Для локального сервера нужно задавать local. Третий параметр - это имя, котрое сконфигурено в dsedit-е. Теперь ase думет что его зовут MARS. Это можно посмотреть так sp_helpserver. Обратите внимаение на id записи с нашим именем MARS. Оно всегда будет 0. Попробуем опять выполнить select date(). Получим такой ответ: Server Message: Number 195, Severity 15 Server 'MARS', Line 1: 'date' is not a recognized built-in function name. Делать rpc-вызовы мы можем только к удаленным серверам. К серверам типа "local" делать такие вызовы нельзя. Поэтому заводим еще одно имя для нашего сервера с классом "sql_server". ASE будет думать, что это удаленный сервер. Код: plaintext Итак, теперь можно будет настроить на нашем локальном ase прокси-таблицу, которая будет брать данные с помощью rpc из "удаленного" сервера THIS. Далее нужно решить проблему авторизации. Сделаем так, что при вызове rpc на удаленном сервере будет использоваться тот же логин, что и на локальном. Для этого и на удаленном и на локальных серверах должен быть заведен пользователь с одинаковым именем и паролем. В нашем случ. удаленный и локальный сервера - это одно и то же, поэтому с этим все в порядке. Для добавления пользователся используется процедура sp_addremotelogin, но для нашего сервера MARS она не сработает, т.к. там стоит проверка что за сервер передается в параметры. Сервер типа "local" не прокатывает. Мы обойдем это ограничение и вставим запись в таблицу sysremotelogins напрямую: Код: plaintext 0 - это ID записи MARS остальные парамтры означают, что при вызове rpc юзеры будут map-ится один к одному. Все. Вроде как после sp_addserver "MARS", "local", "MARS" нужно перегрузить ase. Далее делаем прокси-таблицу. Для этого я воспользовался мастером в Sybase Central (proxy tables -> new ... ) В качестве удаленного сервера выбираем THIS. Командами это делается так: (сам не пробовал, может что-то не получиться) Код: plaintext 1. 2. 3. 4. 5. 6. 7. Все. Вызов xp_cmdshell теперь будет выглядеть так: Код: plaintext Все это я делал для ASE 11.9.5. Для старших версий должно быть примерно так же. Могут отличаться имена классов в sp_addserver. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 16:33 |
|
||
|
|

start [/forum/topic.php?fid=55&gotonew=1&tid=2012002]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 360ms |

| 0 / 0 |
