我一直在编写一些从外部源获取数据的代码。基本上,它首先获取与今天相关的事件列表,处理它,然后获取与明天相关的事件列表。根据给定日期的事件数量,处理可能需要数小时。这是问题所在:
如果我在没有处理的情况下立即运行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:如果在失败后重试呼叫,它始终有效。