HttpClient - 无法创建SSL / TLS安全通道

时间:2015-11-01 02:55:23

标签: c# ssl https dotnet-httpclient

我一直在编写一些从外部源获取数据的代码。基本上,它首先获取与今天相关的事件列表,处理它,然后获取与明天相关的事件列表。根据给定日期的事件数量,处理可能需要数小时。这是问题所在:

如果我在没有处理的情况下立即运行ScrapeToday()ScrapeTomorrow(),那么一切都很糟糕。但是,正如在正常的程序流程中,如果操作之间存在很大差距,我会发现以下错误;

The request was aborted: Could not create SSL/TLS secure channel.

我的第一直觉是,这必定是由HttpClient中的错误造成的,可能会因为请求之间的持续时间过长而到期。但是,当为每个请求创建一个新客户端时,我不会认为这是可能的。我已经在SO和其他一些网站上进行了一些挖掘,但未能找到问题的根源 - 任何帮助都将不胜感激!

以下代码。

public static async Task<Dictionary<string, Calendar.Event>> ScrapeToday()
{
    try
    {
        var client = new HttpClient();
        WriteLine("Requesting today's calendar...");
        var json = await client.GetStringAsync(calendarTodayUrl);
        var results = JsonConvert.DeserializeObject<Dictionary<string, Calendar.Event>>(json);
        return results;
    }
    catch (Exception e)
    {
        Scraper.Instance.WriteLine("Error retrieving today's calendar: " + e);
        return new Dictionary<string, Calendar.Event>();
    }
}

public static async Task<Dictionary<string, Calendar.Event>> ScrapeTomorrow()
{
    try {
        var client = new HttpClient();
        WriteLine("Requesting tomorrow's calendar...");
        var json = await client.GetStringAsync(calendarTomorrowUrl);
        var results = JsonConvert.DeserializeObject<Dictionary<string, Calendar.Event>>(json);
        return results;
    }
    catch (Exception e)
    {
        Scraper.Instance.WriteLine("Error retrieving tomorrow's calendar: " + e);
        return new Dictionary<string, Calendar.Event>();
    }
}

编辑:自发布以来,我尝试制作全局httpclient并将其用于两个请求。这也行不通。

编辑2 :错误可以重现,通话时间为30分钟。

编辑3:如果在失败后重试呼叫,它始终有效。

0 个答案:

没有答案