Я создал ssis пакет. Собственно, ничего необычного. Выглядит он так:
data flow выглядит так:
В data flow елемент Get data это script component в SSIS toolbox. То есть это просто C# скрипт. Этот C# скрипт выполняет следующее:
-создает переменные на сонове параметров, которые я передаю в сам скрипт
-делает первый запрос к апи
-ждет пока статус запроса не станет 200 (так как нужно время чтобы на стороне api сервера сформировался файл, который потом буду скачивать) !!!! В ЭТОМ МЕСТЕ И ВОЗНИКАЕТ ОШИБКА, ТАК КАК ЭТО ЗАНИМАЕТ НЕСКОЛЬКО МИНУТ
-как только статус запроса 200, делаем новый запрос к апи, ьерем от туда файл, обрабатываю этот файл и отдаю в
Output0Buffer строки
Код С# выглядит так:
public override void CreateNewOutputRows()
{
string baseurl = Variables.baseurl;
string start_date = Variables.startdate;
string OAuth = Variables.OAuth;
string ids = Variables.ids;
string end_date = DateTime.Today.ToString("yyyy-MM-dd");
string url = $"{baseurl}application_id={ids}&date_since={start_date}&date_until={end_date}";
// делаем первый запрос
var request = WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Authorization", OAuth);
var response = (HttpWebResponse)request.GetResponse();
var ResponseStatusCode = (int)response.StatusCode;
// ждем пока сформируется файл. Из-за того что файл долго формируется и выпадает ошибка
while (ResponseStatusCode != 200)
{
Thread.Sleep(5000);
request = WebRequest.Create(url);
request.Method = "GET";
request.Headers.Add("Authorization", OAuth);
response = (HttpWebResponse)request.GetResponse();
ResponseStatusCode = (int)response.StatusCode;
}
// файл уже софрмировался. Скачиваем файл
var webStream = request.GetResponse().GetResponseStream();
var reader = new System.IO.StreamReader(webStream);
var data = reader.ReadToEnd();
var jobject = JObject.Parse(data)["data"];
foreach (var obj in jobject)
{
Output0Buffer.AddRow();
Output0Buffer.eventdatetime = (DateTime)obj["event"];
Output0Buffer.eventname = (string)obj["name"];
Output0Buffer.appmetricadeviceid = (string)obj["app"].ToString();
Output0Buffer.city = (string)obj["city"];
Output0Buffer.devicetype = (string)obj["dev"];
}
}
Я запускаю SSIS пакет, и когда дело доходит то этого C# скрипта, он сначала работает пару минут, а потом выдает такую ошибку:
Как это исправить?