EWS 连接被远程主机强行关闭

Posted

技术标签:

【中文标题】EWS 连接被远程主机强行关闭【英文标题】:EWS connection forcibly closed by remote host 【发布时间】:2018-08-03 14:23:07 【问题描述】:

我正在使用 EWS 从收件箱中获取附件。但有时我会收到错误消息。

[SocketException (0x2746): 现有连接被远程主机强行关闭]

我假设这是在交换方面进行的某种节流。所以我的问题是。如何更改我的代码以正确处理此类错误。

            string UserName = Properties.Settings.Default.UserName;
            string Password = Properties.Settings.Default.Password;
            string InboxEmail = Properties.Settings.Default.InboxEmail;
            string SavePath = Properties.Settings.Default.SavePath;
            int ItemViewCount = Properties.Settings.Default.ItemViewCount;
            bool moreItems = true;
            ItemId anchorId = null;

            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
            service.Credentials = new NetworkCredential(UserName, Password);

            service.Url = new Uri("https://myexchangeserver/EWS/Exchange.asmx");

            ServicePointManager.ServerCertificateValidationCallback = delegate  return true; ;

            FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, InboxEmail);
            ItemView itemView = new ItemView(ItemViewCount + 1
                , 0);
            itemView.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);

            SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));

            FindItemsResults<Item> findResults;


            // we need to loop through the pages
            while (moreItems)
            
                findResults = service.FindItems(SharedMailbox, searchFilter, itemView);

                anchorId = findResults.Items.First<Item>().Id;

                // do stuff here


                // see if more is available over the limit of 1k
                moreItems = findResults.MoreAvailable;

                if (moreItems)
                
                    itemView.Offset += ItemViewCount;
                

                // Set the flag to discontinue paging.
                if (!findResults.MoreAvailable)
                
                    moreItems = false;
                
            

【问题讨论】:

捕获异常将是一个开始。 SocketException 抛出的代码在哪里? 似乎与 Ews 的节流无关:social.msdn.microsoft.com/Forums/en-US/… 这是个好问题。不幸的是我不确定。我将代码包含在 try catch 中。但它什么也没抓住。它只返回一般错误,并没有说明错误发生在哪一行。而且它也是间歇性发生的。 正如链接所示,它可能与防火墙或 AV 有关。您的 AV 服务器端是否有某种形式的主动威胁防护? 域防火墙已关闭。服务器在同一个机架中。我得检查一下是否有杀毒软件造成了破坏。 【参考方案1】:

我有同样的问题。我在想这是防火墙或节流的问题。我终于找到了一个奇怪的解决方法。当 Exchange Web 服务 (EWS) 的 FindItems 不断抛出异常时,我打开浏览器并登录网络上的帐户(即 outlook.office365.com)。这可以解决大约 1 小时或更长时间的问题。

这不仅是 EWS 问题,也是 Outlook 无法连接到 Exchange 服务器时的问题。 OWA 登录也解决了这个问题。

【讨论】:

以上是关于EWS 连接被远程主机强行关闭的主要内容,如果未能解决你的问题,请参考以下文章

访问 Photobucket API 时“现有连接被远程主机强行关闭”

现有连接被远程主机强行关闭

无法将数据写入传输连接:现有连接被远程主机强行关闭

System.Net.Sockets.SocketException:'现有连接被远程主机强行关闭'

Azure Blob 存储异常“现有连接被远程主机强行关闭”

操作错误:现有连接被远程主机强行关闭。 (10054)