【问题标题】:Maintain affinity in Pull notifications using EWS managed API使用 EWS 托管 API 在拉取通知中保持关联
【发布时间】:2018-03-07 09:21:47
【问题描述】:

我需要将数千个邮箱中的事件通知到另一个系统,我创建了一个拉取通知订阅,它工作得很好,我已经创建了几个,但我需要分别从每个邮箱中获取 GetEvents(),然后我在 MSDN 中阅读了这篇文章 How to: Maintain affinity between a group of subscriptions and the Mailbox server in Exchange,它说我需要向订阅添加标头,然后我将能够在一个请求中为所有订阅添加 getEvents(),使用 EWS 托管 API,它应该如下所示:

service.HttpHeaders.Add("X-AnchorMailbox", Mailbox.SMTPAddress);
service.HttpHeaders.Add("X-PreferServerAffinity", "true");

那么我应该在响应中取回一个 cookie:

X-BackEndOverrideCookie

我没有在响应中看到 cookie,也没有在文章中找到有关如何在 EWS 托管 API 中获取和使用它的任何内容(除了上面的那两行,本文其余部分均基于 XML我不太喜欢的请求)。除此之外,就请求而言,它应该包括所有订阅 ID(如 XML 中所示),为此我也没有在 EWS 托管 API 中找到解决方案。 我已经使用流式通知解决方案做到了这一点,但我想使用拉式通知。

如果有人对此有任何经验,我很想听听。 提前感谢您花时间阅读本文并在您回答的情况下提供您的答案。

【问题讨论】:

  • 这适用于 Office 365 还是本地 Exchange?如果是本地 Exchange,哪个版本的 Exchange?
  • 这是 Office365 的。
  • 谢谢,我刚刚发布了一个可能适用于 Office 365 的答案。

标签: c# exchange-server office365 exchangewebservices


【解决方案1】:

对于 Office 365,您是否通过我们的 Office 365 邮件、日历和联系人 REST API 端点查看了Webhooks?有关详细信息,请参阅http://dev.outlook.com 上的“连接到 Outlook 服务”。要访问组织内的多个邮箱,您需要使用client credential flow

只要接收通知的系统有一个始终可用的端点来接收推送通知,该模型就可以更好地监控来自数千个邮箱的通知。我的建议是考虑使用 Webhooks API。它目前处于测试阶段,但我们正在积极努力将其带到 GA。此时,您可以在生产环境中使用 Webhooks。

【讨论】:

  • 感谢您的回答,虽然我无法在此项目中使用任何测试版产品/解决方案(客户端限制),但听起来不错。
【解决方案2】:

我知道这个问题是在大约三年前提出的,但我恰好今天正在研究这个问题,希望这对其他人有所帮助。

我正在使用流式通知,但我猜它对于拉取通知的工作方式类似:

// You MUST send a subscription request first! Otherwise there won't be
// any cookies to examine.
exchangeService.SubscribeToStreamingNotifications(foldersToSubscribeTo, EventsToSubscribeTo);

// Get a string of all the cookies
var allCookies = exchangeService.CookieContainer.GetCookieHeader(exchangeService.Url);
Console.WriteLine(allCookies);

// Or get a specific cookie
var cookies = exchangeService.CookieContainer.GetCookies(exchangeService.Url);
var xBackEndOverrideCookie = cookies["X-BackEndOverrideCookie"];
Console.WriteLine(XBackEndOverrideCookie);

我认为对于您使用新交换服务的新订阅请求,您应该像这样设置 cookie:

exchangeService.CookieContainer.SetCookies(url, cookieHeader)

...但我可能是错的,因为我还没有在我的应用程序中实际设置任何 cookie。

【讨论】:

  • 为什么不在发布答案之前对其进行测试?
  • 嗨@StephenRauch!我不知道您以前是否使用过 EWS 托管 API,但我发现缺少有关与 Exchange 交互的关键部分的信息。我感谢人们发布与 EWS 托管 API 相关的任何内容;即使它不完整、与我的应用程序间接相关或未经测试,这些提示也足以让我走上正轨。在我工作时,我无法测试原始提问者正在寻找的确切解决方案,所以我发布了上面的内容,希望我在研究这个主题时所学到的知识能够帮助其他人走上正轨。
猜你喜欢
  • 2012-03-20
  • 2014-03-05
  • 2013-04-16
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多