Microsoft.Exchange.WebServices: Невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленным хостом.

Я пытаюсь сохранить электронную почту в офисе 365, используя Microsoft.Exchange.WebServices.dll (EWS Apis)

     EmailMessage f_ObjEWSMail  = new EmailMessage(objExchangeService);
     f_ObjEWSMail.Save(p_objFoderID); // Throwing error here

Выдает исключение случайным образом:

Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом.

в System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)

в System.Net.TlsStream.EndRead(IAsyncResult asyncResult)

в System.Net.PooledStream.EndRead(IAsyncResult asyncResult)

в System.Net.Connection.ReadCallback(IAsyncResult asyncResult)

или иногда это бросает:

Ошибка запроса. Основное соединение было закрыто: при получении произошла непредвиденная ошибка.

Stack Strace:: at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse (запрос IEwsHttpWebRequest) в Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEst_ReerServiceRequest(IEws.1.Execute() at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalCreateItems(IEnumerable1 элементов, FolderId parentFolderId, Nullable1 messageDisposition, Nullable1 sendInvitationsMode, ServiceErrorHandling errorHandling) в Microsoft.Exchange.WebServices.Data.Item.InternalCreate(FolderId parentFolderId, Nullable)1 messageDisposition, Nullable1 sendInvitationsMode) в Microsoft.Exchange.WebServices.Data.Item.Save(FolderId parentFolderId) в Office365EWSWriter.Office365Engine.SaveMail(EmailMessage p_objEWSMailItem, FolderId p_objFoderID)

Пожалуйста, предложите решение.

1 ответ

Решение

Эти ошибки происходят из-за проблем с основным транспортным соединением (например, ваше сетевое подключение к облаку), потому что, имея дело с облаком, вы не можете гарантировать сеть на 100% (например, против Onprem, когда вы просто подключаетесь к серверу через коммутатор), Все, что вы можете сделать в этом случае, это перехватить ошибку и повторить попытку. Управляемый API EWS использует HttpWebRequest для отправки и получения пакетов SOAP, поэтому эти ошибки генерируются этим классом на клиенте (если вы хотите продолжить поиск этих ошибок, я бы предложил поискать ошибки в этом классе в Stackru). Если вы попытаетесь использовать свой код с облачной виртуальной машины (или службы), такой как AWS или Azure, вы увидите, что количество этих ошибок намного ниже, поскольку базовое сетевое подключение гораздо надежнее.

Другие вопросы по тегам