Странная проблема при загрузке XML с URL - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь загрузить данные из RSS-каналов в SQL серверную базу данных с помощью SSIS, и у меня возникают проблемы с подключением.

Пример URL: https://ecf.akb.uscourts.gov/cgi-bin/rss_outside.pl (Можно нормально подключиться из веб-браузера. )

Я попытался использовать этот сайт в качестве шаблона, https://www.mssqltips.com/sqlservertip/3141/importing-xml-documents-using-sql-server-integration-services/, и все прошло хорошо, я смог подключиться и даже сгенерировать файл .xsd, но когда я пошел на запуск я получил предупреждение о сертификате SSL \ TSL. Я также пробовал использовать встроенную задачу веб-службы, но также столкнулся с проблемами при попытке загрузить файл WSLD с сертификатом.

Пробуем другой способ, основанный на этих двух сайтах, Загрузка SSIS с http - ошибка SSL-сертификат, полученный с сервера, недействителен и http://palkotools.blogspot.com/2011/06/tutorial-how-to-import-rss-feeds-into.html Вместо этого я попытался использовать a C# Задача сценария для загрузки данных XML в файл перед попыткой обработки.

Используя этот пример URL-адреса канала, код работал нормально:

WebClient webClient = new WebClient();
webClient.DownloadFile(@"http://feeds.thehollywoodgossip.com/TheHollywoodGossip?format=xml", @"C:\RSS\RSSFile.xml");

Однако, когда я пытаюсь указать URL-адрес, который мне нужен, из суда, он терпит неудачу:

WebClient webClient = new WebClient();
webClient.DownloadFile(@"https://ecf.akb.uscourts.gov/cgi-bin/rss_outside.pl?format=xml", @"C:\RSS\RSSFile.xml");

Что-то другое \ неправильное с URL-адресом суда? Я всего C# новичок, поэтому я надеюсь, это что-то невероятно простое. Кто-нибудь из вас видит, что я делаю неправильно или должен отличаться от приведенного в качестве примера URL-адреса голливудских сплетен?

Спасибо!

Изменить: это ошибка, которая возвращается с URL-адресом суда

   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Попробуйте добавить этот код в первую строку:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
0 голосов
/ 08 мая 2020

Попробуйте использовать xml linq. Не у каждой записи есть href:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        const string URL = "http://feeds.thehollywoodgossip.com/TheHollywoodGossip?format=xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(URL);
            XElement feed = doc.Root;
            XNamespace ns = feed.GetDefaultNamespace();
            List<Entry> entries = feed.Elements(ns + "entry").Select(x => new Entry()
            {
                id = (string)x.Element(ns + "id"),
                published = (string)x.Element(ns + "published"),
                updated = (DateTime)x.Element(ns + "updated"),
                href = (string)x.Descendants(ns + "href").FirstOrDefault(),
                title = (string)x.Element(ns + "title"),
                content = (string)x.Element(ns + "content"),
                category = (string)x.Element(ns + "category"),
                author = (string)x.Element(ns + "author")
            }).ToList();

        }
    }
    public class Entry
    {
        public string id {get;set;}
        public string published {get;set;}
        public DateTime updated {get;set;}
        public string href {get;set;}
        public string title {get;set;}
        public string content {get;set;}
        public string category {get;set;}
        public string author { get; set; }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...