【问题标题】:how to unsubscribe from EWS push notification using managed API如何使用托管 API 取消订阅 EWS 推送通知
【发布时间】:2014-03-05 08:43:53
【问题描述】:

我正在使用 EWS 托管 API 进行推送订阅。工作正常

现在我想退订

托管 API 文档 http://msdn.microsoft.com/en-us/library/office/dn458791(v=exchg.150).aspx 说使用 service.EndSubscribeToPushNotifications。这显然是错误的——这个函数是一对BeginSubscribeTo...异步操作(反射器证实了这一点)

我在ExchangeService 上没有看到明显的方法。

一般 EWS 文档 http://msdn.microsoft.com/en-us/library/office/aa564263(v=exchg.150).aspx 说发送此 XML,但它仅用于拉取操作

那我该怎么办?

【问题讨论】:

  • 也许您可以改进问题中的代码格式并添加一些更合适的标签以覆盖更多人。虽然我不知道,但问题听起来很有趣

标签: exchangewebservices ews-managed-api


【解决方案1】:

似乎没有办法取消订阅推送通知。唯一的选择是让它超时。

来自http://blogs.msdn.com/b/emeamsgdev/archive/2012/12/20/ews-push-notification-sample.aspx

取消订阅按钮目前实际上并没有做任何事情,因为在托管 API 中还没有实现取消订阅。我会在某个时候实现一个取消订阅,虽然它并不是很重要,因为一旦关闭侦听器,订阅将在一段时间后当 Exchange 没有收到响应(或无法连接)到侦听器端点时超时。

顺便说一句,MSDN 文档建议使用 Streaming 而不是推送通知:

发件人:Notification subscriptions, mailbox events, and EWS in Exchange

如果您在 Exchange 2010 中使用推送通知,请考虑升级您的应用程序以使用流式通知,这样您就不需要单独的应用程序来接收事件。

更新

另一个来源:Transitioning to Exchange Web Services Notifications

我们还经常被问到推送通知超时是如何工作的。假设您的客户端订阅了推送通知,然后意外下线。服务器将无法将下一组事件作为通知推送给客户端(或者,更重要的是,服务器不会收到对其通知消息的响应)。服务器不会立即放弃,而是会重试将它们推出多达 3 次。在第一次失败后,服务器将等待超时时间(即您在订阅请求中设置的超时)并重试。如果该尝试失败,服务器将等待两次超时时间并重试。如果失败,服务器将等待超时时间的三倍,然后重试。最后,如果第三次重试失败,服务器将放弃并删除订阅。

更新 2

在托管 API 之外,您似乎可以通过在 SubscriptionStatus 元素中返回 Unsubscribe 而不是 OK 来终止订阅。 p>

总的来说,有两种方法可以结束 CAS 上的订阅:

  1. 您可以在响应消息中发送“取消订阅”(作为对来自 CAS 的通知消息的响应)。
  2. 您可能会对通知消息无响应。

我们推荐第一种方法(发送取消订阅消息)而不是第二种方法,这会导致客户端访问服务器执行不必要的工作。

MSDN:SubscriptionStatus

代码示例(带有 SubscriptionStatus.OK,因此您必须将其设置为 Unsubscribe 才能获得所需的效果):Exchange Web Services .NET > Tutorial > Push event notification

【讨论】:

  • 不能使用流通知,因为它太占用资源(大量 TCP 连接空闲),而且我有一个不错的大型服务器应用程序
  • 您注意到的第一件事实际上是在重复我的观点:托管 EWS api 没有取消订阅方法。并不一定意味着您可以做到。顺便说一句,如果我没有得到更好的答案,那么你赢了,因为你找到了关于超时的东西
  • 是的,PUSH 通知没有取消订阅,仅用于 PULL。顺便说一句,我认为流式通知不会那么密集,因为您可以在单个连接上接收多个 MB 的通知。使用 PUSH,您可以为每个 MB 的通知启动这些短的 TCP 会话,因此哪个更有效是有争议的。
【解决方案2】:

diegog 的 update2 确实有效,即,如果我们发送带有取消订阅状态的响应,则交易所取消订阅推送通知,之后您不会收到任何进一步的通知。

唯一的问题是它取消订阅所有订阅,即,如果您有多个订阅,那么状态为 unsubscribe 的响应将使交换取消订阅所有订阅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2014-10-13
    • 2011-12-12
    相关资源
    最近更新 更多