Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
YoriKim Member Откуда: Сообщений: 35 |
На одном хосте нужно вызвать веб-службу из хранимой процедуры. Как это можно сделать в MS SQL 2000? |
15 июл 08, 08:56 [5933636] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10232 Блог |
sp_OA... ESP ??? |
15 июл 08, 09:40 [5933831] Ответить | Цитировать Сообщить модератору |
YoriKim Member Откуда: Сообщений: 35 |
saop |
15 июл 08, 09:42 [5933848] Ответить | Цитировать Сообщить модератору |
YoriKim Member Откуда: Сообщений: 35 |
soap* |
15 июл 08, 09:44 [5933863] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Вот код для примера на 2005м.
DECLARE @URL SysName ,@Header XML ,@Body XML -- Создание запроса ;WITH XMLNAMESPACES (DEFAULT '<WebService URI>') SELECT @URL = '<WebService URL>' ,@Body = ( SELECT <WebMethod Param1 Value> AS [WebMethod Param1 Name] ,<WebMethod ParamN Value> AS [WebMethod ParamN Name] FOR XML Path('<WebMethod Name>'),Type) -- Вызов WebMethod-а EXEC dbo.spSOAPMethodCall @URL ,@Header OUT ,@Body OUT -- Результат SELECT @Header ,@Body Сообщение было отредактировано: 5 апр 21, 16:32 |
|||
15 июл 08, 09:54 [5933931] Ответить | Цитировать Сообщить модератору |
YoriKim Member Откуда: Сообщений: 35 |
Спасибо. Сейчас буду портировать на 2000 :) |
15 июл 08, 10:12 [5934058] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Есть одна неприятная весчть в OLE Automation: Это чтение значений более 8000 символов. В выше приведённом случае это решается через INSERT EXEC. Но у него свои ограничеия использования (например, внутре другого INSERT EXEC). Вот жалкие попытки обойти:
Сообщение было отредактировано: 5 апр 21, 16:32 |
|
25 июл 08, 20:02 [5988363] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Подправим вариант для INSERT EXEC. Особенно актуально для вызова из Job-а, т.к. размер строковых данных не устанавливается максимальным, как это делается для нативного клиента.
Сообщение было отредактировано: 5 апр 21, 16:32 |
|
11 апр 11, 10:26 [10499359] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Лишние переменные, вызовы а главное баг, сильно влияют на производительность.
|
|
19 апр 11, 10:26 [10534622] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Дополнительная проверка ответа:
|
|
9 июн 11, 16:03 [10790660] Ответить | Цитировать Сообщить модератору |
Ворон743
Guest |
Коллеги, а что делать, если веб-сервис возвращает не xml, а html с кодировкой windows-1251 (http-equiv="Content-Type" content="text/html; charset=windows-1251")? Как его обработать? |
21 ноя 11, 12:52 [11631054] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Ворон743, там не даром стоитErrDescript = 'text/xml; charset=utf-8'Вы то сами зайдите через брузер и воотчию убедитесь что WS лежит. А SOAP протокол основан на XML. Может у нас не Web сервис, а просто HTTP запрос (POST/GET)? |
21 ноя 11, 14:10 [11631859] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
|
||
21 ноя 11, 14:12 [11631875] Ответить | Цитировать Сообщить модератору |
juwdoks Member Откуда: Сообщений: 144 |
Сейчас есть решения для SOAP и REST, а для XML-RPC есть какие-то примеры? Как с таким вебсервисом поработать напрямую из кода TSQL? Через clr? |
16 июл 12, 11:47 [12871709] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Поменять десять строк, делов-то. Спеки то есть. Даже у Вики есть страничка. Или вы не хотите включить голову и понять смысл вышеописанного кода? |
16 июл 12, 13:17 [12872260] Ответить | Цитировать Сообщить модератору |
juwdoks Member Откуда: Сообщений: 144 |
Mnior, Как всегда, не в бровь, а в глаз :) И на том спасибо, допилю как подсказано. |
16 июл 12, 13:40 [12872350] Ответить | Цитировать Сообщить модератору |
juwdoks Member Откуда: Сообщений: 144 |
Не могу понять что не так: открываю соединение, объявляю Content-Type, отправляю запрос, но все время получаю ответ, что мой xml с параметрами неправильный. Проверял через форму - если тот же xml запроса отправить просто post_ом, то все хорошо, а от MSSQL этот запрос доходит до скрипта без строки <?xml version="1.0" encoding="UTF-8"?> - на что и ругается вебсервис (похоже). Проблема в XML declaration - как заставить MSSQL не убирать его из запроса, даже если version="1.0"? |
17 июл 12, 10:03 [12876080] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
juwdoks, согласен, тотальное большинство не знают что такое XML декларация и для чего она. Кстати, тот сервер, который вы используете писали и...ты. Кодировка текстового потока задаётся в заголовках. Этого достаточно. Когда же уже вытестится эта "проблема". juwdoks, в XML нет никаких заголовков, они есть в средствах хранения и передачи данных. Если их серевер настолько туп, то передавайте строку с дополненной шапкой, а не XML структуру. |
17 июл 12, 11:37 [12876660] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
![]() |
||
17 июл 12, 11:40 [12876690] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
juwdoks Member Откуда: Сообщений: 144 |
Под 2012 даёт ошибку: Ошибка при выполнении метода "send" (msxml3.dll): Параметр задан неверно. Причём формат методов объекта MSXML2.ServerXMLHTTP вроде не менялся (( Кто-то сталкивался? В инете нарыл пару аналогичных жалоб, но решения нет, чтоб его. |
3 ноя 14, 12:09 [16792163] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Sandist Member Откуда: Сообщений: 443 |
juwdoks, та же беда. Мне нужно то же на 2014 сервере. Кто вообще этим пользуется? или может что новое есть для решение таких задач в 2014 скуле? |
21 ноя 17, 14:48 [20972374] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8485 |
Sandist, нормальные люди пишут трехслойку в таких случаях, а прочие - CLR процедуры. |
21 ноя 17, 15:02 [20972453] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
newbie876454 Member Откуда: Сообщений: 36 |
Владислав Колосов, что за трехслойка? Подскажите, как по уму сделать веб сервисы к SQL Server. Нужна отправка в обе стороны. А то нарыл такую фразу: "Перепиши на .Net этот код, сделай Dll и подключи к MS SQL через "CREATE ACCEMBLY". Когда у тебя база задедосит WEB сервер, перепишеш на использование SERVICE BROKER; а когда CLR сожрёт всю оперативу перенесёшь на отдельный сервак. А ПРО MSXML2.XMLHTTP и sp_OACreate ЗАБУДЬ!" И захотел сделать правильно. Только не для SQL Server 2000, а для более актуальной версии: SQL Server 2017. Сообщение было отредактировано: 5 апр 21, 14:11 |
5 апр 21, 14:18 [22304456] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8485 |
newbie876454, имеется в виду трехуровневая архитектура model-view-controller. https://ru.wikipedia.org/wiki/Model-View-Controller. При такой архитектуре контроллер выполняет роль диспетчера данных, view - веб-интерфейс (SOAP, REST и тому подобные) или приложение Windows, модель - база данных, обеспечивающая целостность декларативную и процедурную и доступность (резервные копии, репликация и так далее). В случае необходимости "вызвать веб-службу" этим занимается контроллер, который может выполнить функцию как автоматически, так и по запросу пользователя. Сообщение было отредактировано: 5 апр 21, 16:30 |
5 апр 21, 16:37 [22304635] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |