我使用以下代码从我的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。我该如何处理这个问题?
答案 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上自行检查源代码,因此您的异常处理必须有另一个问题。