基于Azure Functions的桌面应用Microsoft Graph变更通知咨询
关于MS Graph Exchange会议实时通知的问题解答
问题1:是否需要每个客户单独创建notificationUrl,还是可通过Azure Functions HTTP触发器创建统一URL供所有客户使用?
可以使用统一的Azure Functions HTTP触发器URL,无需为每个客户单独创建。具体注意点:
- 在为每个客户注册MS Graph订阅时,请求中需携带该客户的唯一标识(比如
tenantId或自定义客户ID),Azure Functions收到通知后可通过这个标识区分归属客户。 - MS Graph对订阅的
notificationUrl要求是公开可访问的HTTPS地址,Azure Functions的HTTP触发器默认满足此条件,统一URL更便于后续的维护和监控,无需管理分散的多个端点。
问题2:当通知进入Azure Functions应用后,如何将其转发至未托管的桌面应用?
由于未托管的桌面应用通常没有固定公网IP,无法直接接收外部推送,可采用以下几种方案:
- WebSocket长连接方案
- 桌面应用启动后主动连接Azure Functions新增的WebSocket端点,Azure Functions维护一张客户ID与WebSocket连接的映射表。
- 当收到MS Graph的通知时,根据通知中的客户标识找到对应的WebSocket连接,直接将事件推送给桌面应用。需处理连接断开后的重连逻辑,保证可靠性。
- 数据库存储+轮询方案
- Azure Functions收到MS Graph通知后,将事件数据(附带客户标识)存储到数据库(如Azure Table Storage、SQL数据库)中。
- 桌面应用定期向Azure Functions发起请求,拉取属于自己的未处理通知。这种方式实现简单,但实时性取决于轮询间隔,适合对实时性要求不极高的场景。
- 推送通知中转方案
- 集成Azure Notification Hubs这类服务,Azure Functions收到通知后将事件转发到Notification Hubs。
- 桌面应用配置对应的推送客户端,从Notification Hubs接收推送。此方案适合支持原生推送的桌面平台,但需要额外配置推送服务。
内容的提问来源于stack exchange,提问作者dev_101
相关产品推荐
相关产品推荐

