Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Http request не возвращает responseBody / 25 сообщений из 43, страница 1 из 2
09.07.2020, 22:22
    #39977921
lex452
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Http request не возвращает responseBody
Пытаюсь отправить запрос на веб сервис следующим способом
Код: 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
10.07.2020, 00:55
    #39977951
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Http request не возвращает responseBody
Чудное рядом. Получается, чтобы выполнить get-запрос, clr вы писать не хотите, а конвертеры всякие хотите.

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


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



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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

И как же положить запрос к web сервису у которого есть только rest api для взаимодействия. И как ПО должно потом узнать что запрос обработан? Есть простое взаимодействие, вызвал хранимку и либо получил данные либо ошибку.
Это все банальные вещи, до которых вы додумаетесь минут за 5, если у вас есть желание. Если нет, делайте как делаете, кто ж вам запретит.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Http request не возвращает responseBody / 25 сообщений из 43, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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