Telegram Bot останавливается с необработанным исключением типа «System.AggregateException» в mscorlib.dll

Я написал простое приложение для Windows, используя C# для управления ботами Telegram, используя Telegram Bots API Раньше оно работало нормально. но в последнее время он не работает и автоматически закрывается. Когда я запускаю его в режиме отладки, он говорит: An unhandled exception of type 'System.AggregateException' occurred in mscorlib.dll и ссылается на эту строку: Telegram.Bot.Types.Update[] update = bot.GetUpdatesAsync(offset).Result;

Весь код моего приложения здесь:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace bot_test1
{
    public partial class Form1 : Form
    {
        private static string Token = "";
        private Thread botThread;
        Telegram.Bot.TelegramBotClient bot;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            Token = txtToken.Text;
            botThread = new Thread(new ThreadStart(runBot));
            botThread.Start();
        }

        void runBot()
        {
            bot = new Telegram.Bot.TelegramBotClient(Token);
            this.Invoke(new Action(() =>
            {
                lblStatus.Text = "Online";
                lblStatus.ForeColor = Color.Green;
            }));
            int offset = 0;

            while (true)
            {
                Telegram.Bot.Types.Update[] update = bot.GetUpdatesAsync(offset).Result;
                foreach (var up in update)
                {
                    offset = up.Id + 1;
                    if (up.Message == null)
                        continue;

                    var text = up.Message.Text;
                    var from = up.Message.From;
                    var chatId = up.Message.Chat.Id;

                    if (text.Contains("/start"))
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine(from.Username + " Welcome to this bot!");
                        bot.SendTextMessageAsync(chatId, sb.ToString());
                    }
                }
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            botThread.Abort();
        }
    }
}

Я не мог найти, в чем проблема. Я также искал в сети, но не мог найти решение. Не могли бы вы направить меня?

PS. Есть более подробная информация об ошибке:

System.AggregateException was unhandled
  HResult=-2146233088
  Message=One or more errors occurred.
  Source=mscorlib
  StackTrace:
       at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
       at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
       at System.Threading.Tasks.Task`1.get_Result()
       at bot_test1.Form1.runBot() in C:\Users\Person1\Documents\Visual Studio 2015\Projects\bot_test1\bot_test1\Form1.cs:line 47
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
       HResult=-2146233088
       Message=An error occurred while sending the request.
       Source=mscorlib
       StackTrace:
            at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
            at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
            at Telegram.Bot.TelegramBotClient.<MakeRequestAsync>d__54`1.MoveNext()
       InnerException: 
            HResult=-2146233079
            Message=The request was aborted: Could not create SSL/TLS secure channel.
            Source=System
            StackTrace:
                 at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
                 at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
            InnerException: 

person talk_2_ali    schedule 04.03.2020    source источник
comment
AggregateExceptions — это просто контейнер для других исключений. В сообщении об ошибке должно быть больше текста, можете ли вы предоставить и его?   -  person Benno Straub    schedule 04.03.2020
comment
Вы можете использовать сниффер, такой как wireshark или fiddler, для захвата текстовых сообщений. Я подозреваю, что сервер не работает или срок действия вашего токена истек. Можете ли вы пропинговать сервер с помощью cmd.exe › Ping IP (или имя хоста). Попробуйте и имя, и IP.   -  person jdweng    schedule 04.03.2020
comment
Срок действия токена @jdweng не истек. Я также заменяю его новым Токеном для нового бота. Кстати, я мог подключить сайт Telegram, используя систему, на которой работает код. Даже меняю систему и получаю ту же ошибку на любом компе. по поводу снифферов, не знаю о них, но поищу и попробую.   -  person talk_2_ali    schedule 04.03.2020
comment
@BennoStraub Я отредактировал свой пост и добавил больше подробностей об ошибке в пост. Можете ли вы сказать, в чем проблема?   -  person talk_2_ali    schedule 04.03.2020
comment
HTTPS (secure) использует для шифрования TLS/SSL. HTTP использует TCP в качестве транспортного уровня, а TLS/SSL используется в сообщениях TCP. Итак, вы нарушаете шифрование TLS/SSL. Существует множество режимов для TLS (1.0, 1.1, 1.2, 1.3) и SSL (1.0, 2.0, 3.0). И нужен сертификат с ключом. Я подозреваю, что у вас есть сертификат на рабочей машине, но не на удаленных машинах.   -  person jdweng    schedule 04.03.2020
comment
@jdweng Спасибо, но я думаю, что сертификат отсутствует. Как я могу получить и установить подходящий сертификат?   -  person talk_2_ali    schedule 04.03.2020
comment
В предварительной настройке IE должно быть указано расположение сертификата на рабочей машине.   -  person jdweng    schedule 04.03.2020


Ответы (1)


Через некоторое время я нашел решение: эти коды должны быть добавлены в код программы, чтобы она могла работать:

using System.Net;

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Но все же я не уверен, что случилось, что код работал раньше без каких-либо проблем, но теперь ему нужно внести эти изменения, чтобы он мог работать.

person Ames    schedule 06.03.2020
comment
Была такая же проблема, и это тоже сработало, спасибо. - person Marçal Torroella; 08.09.2020