2016-08-04 3 views
0

В SSIS [VS 2012], есть ли способ проверить, действительно ли URL-адрес действителен, прежде чем продолжить процесс загрузки? Если возможно, я хотел бы отделить список URL-адресов между допустимым и недействительным и загрузить только действительные URL-адреса. У меня уже есть пакет, созданный для загрузки списка URL-адресов, но я получаю ошибки в истории из недопустимых URL-адресов, и я хотел бы очистить эти ошибки, отфильтровывая недопустимые URL-адреса. Примеры были бы высоко оценены! Благодаря!SSIS - Проверьте, действительно ли URL-адрес

+0

Наилучший вариант - это сделать на языке программирования, java, C# и т. Д. Прочитайте каждый URL-адрес, затем проверьте, действительно ли он действителен, выдает все допустимые данные в чистый файл для загрузки ssis. Вы можете сделать это в задаче скрипта, но большая часть работы по-прежнему программируется, поэтому лучше оставить ее на языке программирования. – thotwielder

+0

Что делает ваш пакет после загрузки URL-адресов? Как ваш пакет получает ошибки в истории из недопустимых URL-адресов? – thotwielder

+0

Я использую URL-адреса в своем XML-источнике. Поэтому, когда источник попадает на URL-адрес, который не существует, он не работает с ошибкой «URL-адрес не смог прочитать XML-данные: (404) Not Found». У меня есть установка пакета, где, если он не работает, он обновит таблицу аудита, указав, что URL-адрес недействителен. Тем не менее, мой архитектор просматривает историю пакетов, и эти ошибки все еще присутствуют, хотя они были обработаны. Если бы я мог проверить, был ли URL-адрес действительным до загрузки, я мог бы избавиться от этих ошибок. –

ответ

1

Я смог достичь вышеуказанного, используя компонент задачи сценария, а также следующую часть кода C#. Я передал свой URL через переменную и смог проверить, действительно ли это или недействительно. Затем я основывал свои ограничения на приоритет. Благодаря!

public void Main() 

    Dts.Variables["Found"].Value = UrlFound(Dts.Variables["URL1"].Value.ToString()); 
    Dts.TaskResult = (int)ScriptResults.Success; 

    private bool UrlFound(string url) 
    { 
     try 
     { 
      //Creating the HttpWebRequest 
      HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 
      //Setting the Request method HEAD, you can also use GET too. 
      request.Method = "HEAD"; 
      //Getting the Web Response. 
      HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
      //Returns TRUE if the Status code == 200 
      response.Close(); 
      return (response.StatusCode == HttpStatusCode.OK); 
     } 
     catch 
     { 
      return false; 
     } 

    } 
+0

Мне нравится и использовал этот подход, и я +1 для него workign. Единственное, что я нашел, - это то, что использование компонента, а не задачи за пределами потока данных вызывает некорректные ответы от одного из серверов, с которыми я связывался, из-за количества обработанных мной записей. Я закончил тем, что перешел к задаче, а затем нарезал несколько результатов соединения, это была более высокая производительность и отсутствие блокировки от веб-серверов .... – Matt

Смежные вопросы