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(IEnumerable
1 элементов, FolderId parentFolderId, Nullable1 messageDisposition, Nullable
1 sendInvitationsMode, ServiceErrorHandling errorHandling) в Microsoft.Exchange.WebServices.Data.Item.InternalCreate(FolderId parentFolderId, Nullable)1 messageDisposition, Nullable
1 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, вы увидите, что количество этих ошибок намного ниже, поскольку базовое сетевое подключение гораздо надежнее.