Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Отправка http запроса из MSSQL сервера 2008  [new]
kain111
Member

Откуда:
Сообщений: 226
Добрый день коллеги.
Есть задача классифицировать адреса в базе данных MSSQL. Выбрано решения стороннего сервиса имеющего свое API. Разовое классифицирование будет сделано обработкой загруженной на сервер выгрузке в файле. Моя задача посредством API http запроса возвращающего либо xml либо json формата ответа обновлять новые поступающие в систему данные. Частота уровня ежедневного джоба.

1) Какими инструментами лучше организовать такой процесс ? Пока нагуглил только CLR процедуру. Но беда что я лучше знаю яву чем C#. Буду благодарен вариантам.
2) можно ли при помощи DTS пакета организовать такой процесс ? Я не нашел источника web запроса.
21 апр 16, 15:16    [19088956]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
Glory
Member

Откуда:
Сообщений: 104760
kain111
1) Какими инструментами лучше организовать такой процесс ?

А задача стоит реализовать этот процесс прямо вот в запросе SELECT ? Или просто реализовать импорт данных в таблицу ?

kain111
2) можно ли при помощи DTS пакета организовать такой процесс ? Я не нашел источника web запроса.

DTS - это инструмент, а не готовая утилита.
21 апр 16, 15:47    [19089186]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
kain111
Member

Откуда:
Сообщений: 226
Glory,

автор
А задача стоит реализовать этот процесс прямо вот в запросе SELECT ? Или просто реализовать импорт данных в таблицу ?

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

Я понимаю. Я не достаточно хорошо владею этим инструментом и в стандартных источниках не могу найти что то связанное в web запросом. Какая есть возможность в инструменте обратиться к web ресурсу за информацией?
21 апр 16, 18:34    [19090172]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
kain111
1) Какими инструментами лучше организовать такой процесс ?

Integration Service. Устанавливается отдельно, входит в пакет установщика SQL Server. Кроме редакции Express

kain111
2) можно ли при помощи DTS пакета организовать такой процесс ? Я не нашел источника web запроса.

Обычно так и делается. Тoлько не DTS, а SSIS. В вашем случае лучше всего погуглить Web Service и WSDL.
22 апр 16, 11:36    [19092575]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
kain111
Member

Откуда:
Сообщений: 226
автор
Integration Service. Устанавливается отдельно, входит в пакет установщика SQL Server. Кроме редакции Express

Спасибо. Он как раз есть установленный
автор
Обычно так и делается. Тoлько не DTS, а SSIS. В вашем случае лучше всего погуглить Web Service и WSDL.

API стороннего ресурса не подходят под стандарт WSDL. Там сделан упор на передачу параметров методом GET и возвращения XML. Можно ли как то перенастроить Web Service task на простое выполнение запроса, который бы я менял через переменную ?
22 апр 16, 14:49    [19093980]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
На этом форуме это довольно популярная тема.
https://www.sql.ru/forum/1174540/poluchenie-dannyh-cherez-http-protokol
22 апр 16, 15:07    [19094083]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
kain111
автор
Integration Service. Устанавливается отдельно, входит в пакет установщика SQL Server. Кроме редакции Express

Спасибо. Он как раз есть установленный
автор
Обычно так и делается. Тoлько не DTS, а SSIS. В вашем случае лучше всего погуглить Web Service и WSDL.

API стороннего ресурса не подходят под стандарт WSDL. Там сделан упор на передачу параметров методом GET и возвращения XML. Можно ли как то перенастроить Web Service task на простое выполнение запроса, который бы я менял через переменную ?

У меня есть аналогичная задача.
Я реализовал это через HttpConnection и Script Task, но пришлось немного покодить.
Наверно вам проще загружать XML локально через запрос по HTTP, а потом его обрабатывать.
22 апр 16, 16:16    [19094671]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
kain111,

Для SSIS можно написать скрипт загрузки на языке C# или VB .NET.
22 апр 16, 16:22    [19094713]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Вот вам блок работающего кода
public void Main()
{
	try
	{
		// Get your newly added HTTP Connection Manager
		Object mySSISConnection = Dts.Connections["HTTP Connection Manager"].AcquireConnection(null);

		// Create a new connection
		HttpClientConnection myConnection = new HttpClientConnection(mySSISConnection);
		myConnection.ServerURL = "http://xxxxxxxxxxx.com";

		// Access to web site
		myConnection.ServerDomain = "DOMAIN";
		myConnection.ServerUserName = "USER";
		myConnection.ServerPassword = "PASSWORD";

		// to save the file (and replace the existing file)
		myConnection.DownloadFile("c:\\temp\filename.xml", true);

		 // Quit Script Task succesful
		Dts.TaskResult = (int)ScriptResults.Success;
	}
	catch (Exception ex)
	{
		// Quit Script Task unsuccesful
		Dts.TaskResult = (int)ScriptResults.Failure;
	}
}


Предварительно создав соединение, названное "HTTP Connection Manager". Настройки там очень простые, разберетесь.
В принципе доступ к сайту можно определить в самом подключении. Тогда кусок // Access to web site уже не нужен.
22 апр 16, 16:47    [19094894]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
Не забывайте про права учетки при сохранении файла локально.
22 апр 16, 16:49    [19094905]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
kain111
Member

Откуда:
Сообщений: 226
спасибо всем кто ответил. Полдня изучал варианты решения и Ваши комментарии подтверждают мои не уверенные выводы.
[quote автор][/Я реализовал это через HttpConnection и Script Task, но пришлось немного покодить.
Наверно вам проще загружать XML локально через запрос по HTTP, а потом его обрабатывать. quote]
Да . уже накидал примерно проект с HttpConnection и сейчас примусь за кодерство. Загружать XML думаю смысла нет. предполагается работа запроса валидации 1го адреса и ответ по нему XML сразу сохранять в базу распарсив.

автор
Вот вам блок работающего кода

большое спасибо. С него и начну. По воле кривой дорожки карьеры получил навыки MSSQL и Java потому не хотел ввязываться в C# или VB .NET.
22 апр 16, 17:00    [19094996]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
kain111
Member

Откуда:
Сообщений: 226
public void Main()
        {
            try
            {              
                string url = (string)Dts.Variables["URLbase"].Value + System.Web.HttpUtility.UrlEncode((string)Dts.Variables["Adress"].Value);
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
                myRequest.Method = "GET";
                WebResponse myResponse = myRequest.GetResponse();
                StreamReader srUTF8 = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
                string resultUTF8 = srUTF8.ReadToEnd();
                srUTF8.Close();
                myResponse.Close(); 
                //MessageBox.Show(url);
                //MessageBox.Show((string)resultUTF8);
                Dts.Variables["XMLresponce"].Value = (string)resultUTF8;
                Dts.TaskResult = (int)ScriptResults.Success;
            }
            catch (Exception ex)
            {
                // Quit Script Task unsuccesful
                Dts.TaskResult = (int)ScriptResults.Failure;
            }
        }

такая вот функция получилась, надергал из примеров. Главное добавить в reference System.Web.Services или System.Web
Итого следующей workflow:
1) Получение рабочего списка. dataflow. Select из базы и сохранение его в переменную типа объект Recordset destination
2) foreach loop container разбирающий список сохраняя в рабочие переменные. повторяемый все нижеследующее
3) Task script функции выше. сохраняющей ответный XML в переменную
4) Парсер и сохранение результатов в БД. dataflow. Самое сложное.

Пока нет никаких обработок ошибок, но пару тестов успешно отработали.
5 май 16, 10:51    [19137128]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4262
kain111
4) Парсер и сохранение результатов в БД. dataflow. Самое сложное.

Это пока вы не попробовали. Потом сами удивитесь, насколько все просто.
5 май 16, 12:10    [19137703]     Ответить | Цитировать Сообщить модератору
 Re: Отправка http запроса из MSSQL сервера 2008  [new]
kain111
Member

Откуда:
Сообщений: 226
SQL2008
kain111
4) Парсер и сохранение результатов в БД. dataflow. Самое сложное.

Это пока вы не попробовали. Потом сами удивитесь, насколько все просто.

Я попробовал, и даже сделал успешный и мне действительно понравилось :) даже задержался на пару часиков чтобы доделать, но пока не понятно как строить механизм обработки ошибок.
5 май 16, 12:21    [19137794]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить