我正在使用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,但它仅用于拉动操作
那我该怎么办?
答案 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的订阅:
- 您可以在回复消息中发送“取消订阅”(作为对来自CAS的通知消息的回复)。
- 您可以对通知消息无响应。
醇>我们建议使用第一种方法(发送取消订阅消息)而不是第二种方法,这会导致客户端访问服务器执行不必要的工作。
MSDN:SubscriptionStatus
代码示例(使用SubscriptionStatus.OK,因此您必须将其设置为取消订阅才能获得所需效果):Exchange Web Services .NET > Tutorial > Push event notification
答案 1 :(得分:1)
diegog的update2确实有效,即如果我们发送带有取消订阅状态的回复,则交易所会取消订阅推送通知,此后您不会收到任何进一步的通知。
唯一的问题是它取消订阅所有订阅,即如果您有多个订阅,那么状态取消订阅的回复将使交易所取消订阅所有订阅。