powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Http request не возвращает responseBody
43 сообщений из 43, показаны все 2 страниц
Http request не возвращает responseBody
    #39977921
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь отправить запрос на веб сервис следующим способом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @xmlhttp int
declare @hr int
exec sp_OACreate 'WinHttp.WinHttpRequest.5.1', @xmlhttp out
EXEC @hr=sp_OAMethod @xmlhttp, 'open', NULL, 'GET', 'http://site/endpoint', false
if @hr=0 exec @hr = sp_OAMethod @xmlhttp, 'send', NULL, null

declare @tab table (x varbinary(max))
if @hr=0 insert into @tab 
exec @hr = sp_OAGetProperty @xmlhttp, 'responseBody';
exec  @hr = sp_OADestroy @xmlhttp;
select x from @tab



Но при длинном responseBody (предполагаю больше 8000 байт), возвращается NULL. Хотя браузер возвращает все корректно и responseText тоже возвращает данные (но с крякозябрами вместо русских символов). При небольших ответах все возвращается корректно. В чем может быть проблема?


Изначально использовал x nvarchar(max) и responseText, но там не устроило то что sql не умеет корректно отображать кириллицу, возвращаемую в utf-8. Поэтому решил возвращать массив байт и преобразовывать их через clr в utf-8.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39977951
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чудное рядом. Получается, чтобы выполнить get-запрос, clr вы писать не хотите, а конвертеры всякие хотите.

В общем, не будьте как мыши и не ешьте кактус, и не будете исколоты.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39977959
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,


Любую внешнюю по отношению к серверу нагрузку (особенно асинхронные вызовы) я бы советовал решать через использование очередей Service Broker + внешнее приложение.



протестите что вообще возвращает объект ole-автоматизации, создайте аналог вашего вызова в скрипте powershell или VB
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39977981
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

У меня есть аналог на clr. Просто он, субъективно , работает медленнее. Менее гибкий к изменениям. А объекты ole возвращают то что у них просишь
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978062
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, это классическая ошибка начинающего - думать, что SQL server является сервером приложений или средой разработки прикладного ПО.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978249
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Так, если он позволяет решать поставленные задачи, то почему НЕТ? Потому что так не принято? Или есть более объективные причины? И причем здесь сервер приложений, если нужно просто сделать за прос к конечной точке и получить ответ в json?
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978251
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

процедуры sp_oa и xp_cmdshell являются потенциально опасными компонентами.

во-первых для их запуска требуются широкие права доступа (не каждому хочется давать sysadmin на сервер)
во-вторых через эти компоненты можно запускать скрипты которые могут нарушить нормальную работу сервера.

ну и в третьих вы сами видите некоторые артефакты их работы.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978255
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

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

На сервере с двумя десятками процедур и единственным администратором проблем не будет. Проблемы возникнут при разработке производственной базы. Внезапно окажется, что недостаточно прав или что-то не установлено или политика безопасности запрещает OLE автоматизацию.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978270
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, если я взялся за это, то наверно эти моменты были учтены. И права sa не обязательны, всегда есть роли приложений и execute as. Так что не все так однозначно при продуманном подходе
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978280
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Так, если я взялся за это, то наверно эти моменты были учтены. И права sa не обязательны, всегда есть роли приложений и execute as. Так что не все так однозначно при продуманном подходе
У тех, у кого продуманный подход и все моменты учтены, тем на форуме нет.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978301
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Когда используешь новый для себя инструмент, заранее не знаешь о подводных камнях. И когда пишешь вопрос на форуме, то ожидаешь помощи по нему, а не флуда, типа зачем тебе это надо. По мне так если нечего ответить на заданный вопрос, то и комментарии оставлять не за чем.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978325
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
И когда пишешь вопрос на форуме, то ожидаешь помощи по нему, а не флуда, типа зачем тебе это надо.
Сорян, но лично я не даю советов, как лучше хреначить молотком по пальцам, с какой силой надо забивать микроскопом гвозди и как правильно есть кактус. Все те, кто уверены, что им это действительно надо, пусть выясняют это самостоятельно.

lex452
По мне так если нечего ответить на заданный вопрос, то и комментарии оставлять не за чем.
Ну так и не оставляйте. Остальные сами разберутся, как им себя вести.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978329
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lex452,
Попробуйте сделать com-объект, который будет инкапсулировать запрос к внешнему ресурсу и разобраться какой ответ сервис возвращает. Еще есть инструменты типа fiddler’a чтобы понять что происходит(запрос/ответ) в результате запроса к внешнему ресурсу.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978330
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Гавриленко Сергей Алексеевич,

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


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

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


знаю программиста который писал прикладное ПО на статических полях онли и оно работало в продакшене, но этот факт не превращает говнокод в конфету.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978351
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

а как вы планируете это решение тестами покрывать?

Первый вопрос, что мне всегда задаёт QA Lead
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978360
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
Тс похоже сам понял что не в правильном направлении движется.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978380
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В целях безопасности обычно закрывают HTTP с сервера БД, кроме всего прочего. Кроме того, при наличии реплики доступности на открывать дополнительные доступы с реплики. Недостатков такого решения достаточно много. Например, сложность отладки и написания автотестов.
Применимость для промышленных решений сильно ограничена.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978400
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А последующие вопросы будут от ребят, что отвечают за эксплуатацию на проде: где мониторинг, где хелсчеки?
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978423
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
не у всех есть такие требования.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978425
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
что будет тогда когда изменится ответ от веб-сервиса?

Ничего не будет, вернется другой ответ
felix_ff

что будет тогда когда веб-сервис станет недоступен?

Вернется ошибка 500
felix_ff
что будет тогда когда в веб-сервис будет передан неверный запрос?

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

Вообще-то там есть описание ошибок и настройка таймаута, вообще не понимаю к чему вы это написали.

И я не пишу веб сервер, я пишу хранимку котороая может отправлять запросы по http
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978427
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Существуют закрытые системы, и если нет явных требований к безопасности и тестированию то для чего мне все это? ПОтому что так принято и все?
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978428
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И раз все так решили поумничать и всего пару человек написали по теме. То предложите как решить задачу, когда существует стороннее ПО, которое умеет вызывать только стандартизованные хранимые процедуры и получать в ответ табличный набор данных, и вот стоит задача, через это ПО получить данные с WEB сервиса. Какое решение можете предложить кроме как обращаться к сервису через transact?
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978429
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
И раз все так решили поумничать и всего пару человек написали по теме. То предложите как решить задачу, когда существует стороннее ПО, которое умеет вызывать только стандартизованные хранимые процедуры и получать в ответ табличный набор данных, и вот стоит задача, через это ПО получить данные с WEB сервиса. Какое решение можете предложить кроме как обращаться к сервису через transact?
ПО сначала вызывает стандартизированную процедуру, которая кладет запрос к веб-сервису в очередь, любым вменяемым способом очередь обрабатывается, результат обработки складывается в таблицу, ПО забирает данные из таблицы стандартизированным способом.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978430
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

И как же положить запрос к web сервису у которого есть только rest api для взаимодействия. И как ПО должно потом узнать что запрос обработан? Есть простое взаимодействие, вызвал хранимку и либо получил данные либо ошибку.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978431
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Гавриленко Сергей Алексеевич,

И как же положить запрос к web сервису у которого есть только rest api для взаимодействия. И как ПО должно потом узнать что запрос обработан? Есть простое взаимодействие, вызвал хранимку и либо получил данные либо ошибку.
Это все банальные вещи, до которых вы додумаетесь минут за 5, если у вас есть желание. Если нет, делайте как делаете, кто ж вам запретит.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978432
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Вот я и создал топик, чтобы сделать как желаю, и попросил помощи по исправлению ошибки, но вместо помощи получил кучу зачем и почему
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978433
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Гавриленко Сергей Алексеевич,

Вот я и создал топик, чтобы сделать как желаю, и попросил помощи по исправлению ошибки, но вместо помощи получил кучу зачем и почему
22165554
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978436
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

попробуй так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @tab table (x varbinary(max))
if @hr=0 begin
  SET TEXTSIZE 2147483647;
  insert into @tab 
  exec @hr = sp_OAGetProperty @xmlhttp, 'responseBody';
end
exec  @hr = sp_OADestroy @xmlhttp;
select x from @tab
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978437
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

ТО есть для простой задачи, отправить http запрос на сервис через хранимку, вы предлагаете разработать целую инфраструктуру с табличками очередей запросов, написать отдельную прослойку, которая будет разгребать эту очередь и отправлять уже запросы на сервис а ответы класть еще в одну табличку, и изначально хранимка должна периодически проверять обработался ли ее запрос. Очень интересное предложение
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978438
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

Спасибо, попробую)
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978440
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Гавриленко Сергей Алексеевич,

ТО есть для простой задачи, отправить http запрос на сервис через хранимку, вы предлагаете разработать целую инфраструктуру с табличками очередей запросов, написать отдельную прослойку, которая будет разгребать эту очередь и отправлять уже запросы на сервис а ответы класть еще в одну табличку, и изначально хранимка должна периодически проверять обработался ли ее запрос. Очень интересное предложение
Ну да, ну да, две таблицы, две процедуры и скпипт, который читает с одной таблицы, делает запрос и кладет результаты в другую -- целая инфраструктура. Прям 5 лет и 5 лямов денег надо, чтобы реализовать.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978443
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

И зачем так усложнять такую задачу? И когда будет одновременно 1000 запросов, таблица sql server загнется от блокировок, потому что у нее будут либо постоянные delete либо update и много другого геморой. Нет уж спасибо за совет. Clr из 15 строчек кода меня больше устроит.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978444
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Гавриленко Сергей Алексеевич,

И зачем так усложнять такую задачу? И когда будет одновременно 1000 запросов, таблица sql server загнется от блокировок, потому что у нее будут либо постоянные delete либо update и много другого геморой. Нет уж спасибо за совет. Clr из 15 строчек кода меня больше устроит.
Хотите делать из сервера СУБД сервер приложений -- дело ваше. Но если речь идет о 1000 запросов одновременно, то с таким подходом начинайте готовить много денег на его апгрейд, когда у вас закончатся цпу/память сервера .

И да, для таблицы-очереди команды update и delete не нужны от слова "совсем".
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978472
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Значит предлагаете использовать broker. Или кафку развернуть?
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978503
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
Гавриленко Сергей Алексеевич,

Значит предлагаете использовать broker. Или кафку развернуть?
Вам виднее: отсюда не понятно, какого масштаба вы там воротите дела. Тем более, вариантов вам накидали.

А про очереди -- до определенного предела они отлично делаются на обычных таблицах.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978504
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Гавриленко Сергей Алексеевич#22165846]
lex452


А про очереди -- до определенного предела они отлично делаются на обычных таблицах.

можно подробнее, а то я не знаю способа без insert, delete, select top 1 и без блокировок и чтобы одновременно несколько консьюмеров получили разные строки
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978509
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lex452
Гавриленко Сергей Алексеевич,

И зачем так усложнять такую задачу? И когда будет одновременно 1000 запросов, таблица sql server загнется от блокировок, потому что у нее будут либо постоянные delete либо update и много другого геморой. Нет уж спасибо за совет. Clr из 15 строчек кода меня больше устроит.

У Вас на каждый вызов хп должен выполняться вызов rest-сервиса? Имхо такие вещи необходимо разруливать через асинхронщину.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978510
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L.Otujktd,

WinHttp.WinHttpRequest.5.1 поддерживает асинхронный режим
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978511
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452
можно подробнее, а то я не знаю способа без insert, delete, select top 1 и без блокировок и чтобы одновременно несколько консьюмеров получили разные строки

Случай с множественными консьюмерами -- как раз не простой, но и тут есть варианты, если очень охота, а кафку поднимать негде.

Данные для разных консьюмеров изолируются либо через отельные партиции, либо через таблицы. В случае с отдельными таблицами придется городить огород, чтобы их как-то равномерно наполнять, но их можно секционировать по дате / диапазонам id и обработанные партиции транкейтить. В случае с одной таблицей придется как-то решать вопрос с очисткой обработанных данных, но и тут есть варианты, например, можно нарезать новые таблицы, а по факту полной обработки удалять старые. Консьюмер, соответственно, сидит на своей партиции/таблице и последовательно ее обрабатывает, отмечая где-то последний обработанный ключ, оффсет -- как назовете.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978512
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Да это был своего мини тролинг. я знаю что нормального решения с таблицами нету, и все это будет костыль костыльный. Вот только не пойму зачем вы мне все эти городушки предлагаете. Вы вроде человек очень опытный и врядли сами бы пошли таким путем. Но все равно будете продолжать гнуть свою линию. Про все это я и говорил, когда употребил слово инфраструктура.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978515
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex452,

Что ж, было приятно пообщаться. Прощайте.
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39978516
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,
И вам пока
...
Рейтинг: 0 / 0
Http request не возвращает responseBody
    #39983582
lex452
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

Не помогло
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Http request не возвращает responseBody
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]