C# Office 365-EWS管理的API 2.0模拟401未经授权/503不可用

C# Office 365-EWS管理的API 2.0模拟401未经授权/503不可用,c#,office365,impersonation,ews-managed-api,C#,Office365,Impersonation,Ews Managed Api,使用上面的代码创建ExchangeSession和 private ExchangeService connectToEWS(string email, bool impersonate = false) { WebCredentials credentials = new WebCredentials(username, password, domain); ExchangeVersion version = (ExchangeVersion)exchangeVersion;

使用上面的代码创建ExchangeSession和

private ExchangeService connectToEWS(string email, bool impersonate = false) {
   WebCredentials credentials = new WebCredentials(username, password, domain);
   ExchangeVersion version = (ExchangeVersion)exchangeVersion;
   ExchangeService service = new ExchangeService(version) {
      Credentials = credentials,
      Url = new Uri("https://outlook.office365.com/ews/exchange.asmx")
   };
   if (impersonate) {
      service.HttpHeaders.Add("X-AnchorMailbox", email);
      service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);                      service.CookieContainer = new CookieContainer();
   }
   service.Timeout = int.MaxValue;
}
我在FindFolders调用中收到401未经授权的异常。如果我使用另一个只接受smtp和密码的WebCredentials构造函数,我会得到一个503 server not available异常。当我不使用模拟(而是委托访问)时,不会引发异常,我可以获得文件夹列表,但我需要能够支持模拟


我已将ApplicationImpersonation角色添加到服务帐户(第一个代码块中的用户名)。模拟是否需要其他角色?我在EWS模拟文档中找不到任何内容。关于这个问题的每一个其他线程都指向UPN的使用,而不是smtp,但我相当肯定这个smtp与UPN相同。然而,我不知道在o365中应该去哪里寻找。

嗨,道格,你找到过你问题的答案吗?我们有一个客户的第三方软件,在检索日历信息时返回503错误。在使用模拟时也是如此。
ExchangeService service = connectToEWS(email, true);
FolderId msgFolderRoot = WellKnownFolderName.MsgFolderRoot;
FolderView view = new FolderView(int.MaxValue);
view.PropertySet = PropertySet.IdOnly;
var result = service.FindFolders(msgFolderRoot, view);