代码之家  ›  专栏  ›  技术社区  ›  Irvin Dominin

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

  •  0
  • Irvin Dominin  · 技术社区  · 6 年前

    我正在使用以下代码从我的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);
    

    应用程序通常会崩溃,但有以下例外:

    微软交换WebServices。数据ServiceRequestException: 请求失败。操作已超时---> 系统网WebException:操作在处超时 系统网HttpWebRequest。GetResponse()位于 微软交换WebServices。数据EwsHttpWebRequest。微软交换WebServices。数据IEwsHttpWebRequest。GetResponse() 在 微软交换WebServices。数据ServiceRequestBase。GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)--内部异常堆栈跟踪结束---at 微软交换WebServices。数据ServiceRequestBase。GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)在 微软交换WebServices。数据ServiceRequestBase。ValidateAndItemRequest(IEwsHttpWebRequest& 请求)在 微软交换WebServices。数据MultiResponseServiceRequest“1”。执行() 在 微软交换WebServices。数据ExchangeService。BindToFolder(文件夹ID folderId,PropertySet PropertySet)位于 微软交换WebServices。数据ExchangeService。BindToFolder[文件夹](FolderId folderId,PropertySet PropertySet)位于 微软交换WebServices。数据日历文件夹。绑定(ExchangeService 服务,文件夹id)

    或:

    微软交换WebServices。数据ServiceRequestException: 请求失败。远程服务器返回错误:(503)服务器 不可用---&燃气轮机;系统网WebException:远程服务器返回 错误:(503)服务器不可用。在 系统网HttpWebRequest。GetResponse()位于 微软交换WebServices。数据EwsHttpWebRequest。微软交换WebServices。数据IEwsHttpWebRequest。GetResponse() 在 微软交换WebServices。数据ServiceRequestBase。GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)--内部异常堆栈跟踪结束---at 微软交换WebServices。数据ServiceRequestBase。GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)在 微软交换WebServices。数据ServiceRequestBase。ValidateAndItemRequest(IEwsHttpWebRequest& 请求)在 微软交换WebServices。数据MultiResponseServiceRequest“1”。执行() 在 微软交换WebServices。数据ExchangeService。BindToFolder(文件夹ID folderId,PropertySet PropertySet)位于 微软交换WebServices。数据ExchangeService。BindToFolder[文件夹](FolderId folderId,PropertySet PropertySet)位于 微软交换WebServices。数据日历文件夹。绑定(ExchangeService 服务,文件夹id)

    或:

    微软交换WebServices。数据ServiceRequestException: 请求失败。基础连接已关闭:连接 服务器关闭了预期保持活动状态的---&燃气轮机; 系统网WebException:基础连接已关闭:A 预期保持活动状态的连接已由关闭 服务器at系统。网HttpWebRequest。GetResponse()位于 微软交换WebServices。数据EwsHttpWebRequest。微软交换WebServices。数据IEwsHttpWebRequest。GetResponse() 在 微软交换WebServices。数据ServiceRequestBase。GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)--内部异常堆栈跟踪结束---at 微软交换WebServices。数据ServiceRequestBase。GetEwsHttpWebResponse(IEwsHttpWebRequest 请求)在 微软交换WebServices。数据ServiceRequestBase。ValidateAndItemRequest(IEwsHttpWebRequest& 请求)在 微软交换WebServices。数据多响应服务请求 1.Execute() at Microsoft.Exchange.WebServices.Data.ExchangeService.FindItems[TItem](IEnumerable 1. ParentFolderId、SearchFilter SearchFilter、String queryString、, ViewBase视图、分组依据、服务错误处理 错误处理模式) 微软交换WebServices。数据文件夹InternalFindItems[滴度](SearchFilter searchFilter、ViewBase view、groupBy)位于 微软交换WebServices。数据日历文件夹。FindApoints(日历视图 视图)

    或:

    服务器当前无法服务此请求。请稍后再试。

    有时,Office 365服务似乎无法访问或处于节流状态;我试图捕获我的代码,但应用程序仍然崩溃;我想是因为一个新的线程被打开了。我如何处理这个问题?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jan Doggen    4 年前

    首先要从Github获取EWS托管API的最新版本 https://github.com/OfficeDev/ews-managed-api . 自2015年Microsoft停止发布该库的编译版本以来,您使用的版本一直没有更新。然而,代码已经更新,GitHub上有许多错误修复

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

    根据应用程序所做的工作量,您可能会受到限制,在这种情况下,处理异常并重试很重要。此外,使用Office365,邮箱在后端移动了相当一段时间,因此在这些移动过程中经常会看到邮箱不可访问的时期

    我试图捕获我的代码,但应用程序仍然崩溃;我想是因为一个新的线程被打开了。我如何处理这个问题?

    不,它不跨新线程。您可以自己在GitHub上检查源代码,因此您的异常处理肯定存在另一个问题。