如何使用托管API取消订阅EWS推送通知

时间:2014-02-07 19:28:56

标签: exchangewebservices ews-managed-api

我正在使用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,但它仅用于拉动操作

那我该怎么办?

2 个答案:

答案 0 :(得分:5)

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

  

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

     

取消订阅按钮当前并未执行任何操作,因为尚未在托管API中实施取消订阅。我将在某些时候实现Unsubscribe,虽然它并不过分重要,因为一旦侦听器关闭,订阅将在一段时间后超时,当Exchange没有收到响应(或无法连接)到侦听器端点时。

BTW,MSDN文档建议使用Streaming而不是推送通知:

  

来自:Notification subscriptions, mailbox events, and EWS in Exchange

     

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

<强>更新

  

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

     

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

更新2

在托管API之外,您可以通过在 SubscriptionStatus 元素中返回取消订阅而不是确定来终止订阅。

  

总之,有两种方法可以结束对CAS的订阅:

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

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

MSDN:SubscriptionStatus

代码示例(使用SubscriptionStatus.OK,因此您必须将其设置为取消订阅才能获得所需效果):Exchange Web Services .NET > Tutorial > Push event notification

答案 1 :(得分:1)

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

唯一的问题是它取消订阅所有订阅,即如果您有多个订阅,那么状态取消订阅的回复将使交易所取消订阅所有订阅。