使用EWS管理的API维护Pull通知中的关联
本文关键字:通知 关联 Pull API EWS 管理 使用 维护 | 更新日期: 2023-09-27 17:52:33
我需要将数千个邮箱中的事件通知到另一个系统,我创建了一个拉通知订阅,它工作得很好,我创建了几个,但我需要分别从每个邮箱中获取GetEvents(),然后我阅读了这篇文章如何:在MSDN中维护一组订阅和Exchange中的邮箱服务器之间的关联,它说我需要向订阅添加标头,然后我将能够在一个请求中为所有订阅添加getEvents(),使用EWS管理的API,它应该是这样的:
service.HttpHeaders.Add("X-AnchorMailbox", Mailbox.SMTPAddress);
service.HttpHeaders.Add("X-PreferServerAffinity", "true");
那么我应该在响应中得到一个cookie:
X-BackEndOverrideCookie
我没有在响应中看到cookie,我也没有在文章中找到关于如何在EWS管理的API中获取和使用cookie的任何内容(除了上面的两行,文章的其余部分都是基于XML请求,这是我不太喜欢的)。除此之外,就请求而言,它应该包括所有订阅id(如XML中所示),对此我也没有在EWS管理的API中找到解决方案。我已经用流媒体通知解决方案做到了这一点,但我想用拉通知工作。
如果有人有任何经验,我很乐意听到。提前感谢你花时间阅读这篇文章,如果你已经回答了,也感谢你的回答。
对于Office 365,您是否通过我们的Office 365邮件、日历和联系人REST API端点查看过Webhooks ?有关详细信息,请参阅http://dev.outlook.com上的"连接到Outlook服务"。要访问组织内的多个邮箱,需要使用客户端凭据流。
只要接收通知的系统有一个始终可用的端点来接收推送通知,该模型就可以更好地监视来自数千个邮箱的通知。我的建议是使用Webhooks API。它目前处于测试阶段,但我们正在积极地把它带到GA。此时,您就可以在生产环境中使用Webhooks了。
我知道这个问题是三年前问的,但我今天碰巧正在研究这个问题,希望这能帮助到其他人。
我正在使用流通知,但我猜它会类似地工作为拉通知:
// 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
@broAhmed,您访问X-BackendOverrideCookie的方式非常有效!但是就在新的EWS请求的HttpHeaders中设置X-BackendOverrideCookie而言,以下是对我有用的:
// this is how to get the cookie
string xBackendOverrideCookie = exchangeService.CookieContainer
.GetCookies(exchangeService.Url)["X-BackendOverrideCookie"].Value;
// this is how to set the cookie for future requests
exchangeService.HttpHeaders.Add("X-BackendOverrideCookie", xBackendOverrideCookie);