EWS Api提供超时和(503)服务器不可用

时间:2018-01-20 11:30:31

标签: c# office365 exchangewebservices

我使用以下代码从我的Office 365帐户获取日历约会和EWS api的设置(Microsoft.Exchange.WebServices 2.2.0):

ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential(mail, password);
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
Folder DefaultCalendar = Folder.Bind(service, WellKnownFolderName.Calendar);
CalendarView calendarView = new CalendarView(fromDate, toDate);
FindItemsResults<Appointment> resultAppointments = Folder.FindAppointments(calendarView);

应用程序崩溃时常常出现以下情况:

  

Microsoft.Exchange.WebServices.Data.ServiceRequestException:The   请求失败。操作已经超时---&gt;   System.Net.WebException:操作已超时   System.Net.HttpWebRequest.GetResponse()at   Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()   在   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest   请求)---内部异常堆栈跟踪结束--- at   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest   请求)   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest&安培;   请求)   Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()   在   Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder(FolderId   folderId,PropertySet propertySet)at   Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder [TFolder](FolderId   folderId,PropertySet propertySet)at   Microsoft.Exchange.WebServices.Data.CalendarFolder.Bind(ExchangeService   service,FolderId id)

或:

  

Microsoft.Exchange.WebServices.Data.ServiceRequestException:The   请求失败。远程服务器返回错误:(503)服务器   不可用。 ---&GT; System.Net.WebException:返回远程服务器   错误:(503)服务器不可用。在   System.Net.HttpWebRequest.GetResponse()at   Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()   在   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest   请求)---内部异常堆栈跟踪结束--- at   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest   请求)   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest&安培;   请求)   Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()   在   Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder(FolderId   folderId,PropertySet propertySet)at   Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder [TFolder](FolderId   folderId,PropertySet propertySet)at   Microsoft.Exchange.WebServices.Data.CalendarFolder.Bind(ExchangeService   service,FolderId id)

或:

  

Microsoft.Exchange.WebServices.Data.ServiceRequestException:The   请求失败。底层连接已关闭:连接   预计将保持活着的服务器已关闭。 ---&GT;   System.Net.WebException:基础连接已关闭:A   预计将保持活着的连接被关闭   服务器。在System.Net.HttpWebRequest.GetResponse()处   Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()   在   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest   请求)---内部异常堆栈跟踪结束--- at   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest   请求)   Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest&安培;   请求)   Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest 1.Execute() at Microsoft.Exchange.WebServices.Data.ExchangeService.FindItems[TItem](IEnumerable 1   parentFolderIds,SearchFilter searchFilter,String queryString,   ViewBase视图,Grouping groupBy,ServiceErrorHandling   errorHandlingMode)at   Microsoft.Exchange.WebServices.Data.Folder.InternalFindItems [TItem](SearchFilter   searchFilter,ViewBase视图,分组groupBy)at   Microsoft.Exchange.WebServices.Data.CalendarFolder.FindAppointments(CalendarView   视图)

或:

  

服务器现在无法为此请求提供服务。稍后再试。

似乎有时Office 365服务无法访问或受到限制;我试图尝试捕获我的代码,但应用程序仍然崩溃;我认为因为打开了新的Thread。我该如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

首先要从Github https://github.com/OfficeDev/ews-managed-api获取最新版本的EWS托管API。您使用的版本自2015年以来未更新,这是Microsoft停止发布该库的编译版本的时候。但是,代码已在GitHub上更新了许多错误修复

使用您使用的代码我建议您始终设置X-AnchorHeader,这可能导致503和超时问题,请参阅 https://blogs.msdn.microsoft.com/webdav_101/2015/05/11/best-practices-ews-authentication-and-access-issues/(即使你没有使用模仿)

根据应用程序的工作量,在这种情况下,您可能会受到限制,以处理异常并重试。此外,Office365邮箱会在后端移动一段时间,因此在这些移动过程中看到邮箱无法访问的时间段是常见的

  
    

我试图尝试捕获我的代码,但应用程序仍然崩溃;我认为因为打开了新的Thread。我该如何处理这个问题?

  

不,它没有跨越新线程,您可以在GitHub上自行检查源代码,因此您的异常处理必须有另一个问题。