Как отписаться от push-уведомлений EWS с помощью управляемого API
Я использую управляемый API EWS для принудительной подписки. Работает отлично
Теперь я хочу отписаться
Документы управляемого 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 ответа
Кажется, нет способа отписаться от push-уведомлений. Единственный вариант - дать ему время.
От http://blogs.msdn.com/b/emeamsgdev/archive/2012/12/20/ews-push-notification-sample.aspx
Кнопка Unsubscribe на самом деле ничего не делает в настоящее время, так как Unsubscribe не была реализована в управляемом API. Я буду реализовывать Unsubscribe в какой-то момент, хотя это не слишком важно, так как после того, как слушатель закрыт, подписка через некоторое время истечет, когда Exchange не получит ответ (или не сможет подключиться) к конечной точке слушателя.
Кстати, документация MSDN рекомендует использовать потоковую передачу, а не push-уведомления:
От: подписка на уведомления, события почтового ящика и EWS в Exchange
Если вы используете push-уведомления в Exchange 2010, рассмотрите возможность обновления приложения для использования потоковых уведомлений, чтобы вам не требовалось отдельное приложение для получения событий.
Обновить
Другой источник: переход на уведомления веб-служб Exchange
Нас также часто спрашивают, как работают тайм-ауты push-уведомлений. Предположим, ваш клиент подписался на push-уведомления, а затем неожиданно переходит в автономный режим. Сервер не сможет отправлять следующий набор событий в качестве уведомлений клиенту (или, что более важно, сервер не получит ответ на свое уведомляющее сообщение). Вместо того, чтобы сразу сдаваться, сервер попытается вытолкнуть их до трех раз. После первого сбоя сервер подождет время ожидания (это время, которое вы задали в запросе на подписку) и повторите попытку. Если эта попытка не удалась, сервер дважды подождет время ожидания и попытается снова. Если это не удастся, сервер подождет три раза тайм-аут и попытается снова. Наконец, если третья попытка не удалась, сервер откажется и удалит подписку.
Обновление 2
Похоже, что вне управляемого API вы можете прекратить подписку, вернув Unsubscribe в элементе SubscriptionStatus вместо OK.
Итак, на самом деле есть два способа завершить подписку на CAS:
- Вы можете отправить "Отписаться" в ответном сообщении (как ответ на сообщение с уведомлением от CAS).
- Вы можете перестать отвечать на уведомления.
Мы рекомендуем первый метод (отправка сообщения об отмене подписки), а не второй метод, который заставляет сервер клиентского доступа выполнять ненужную работу.
MSDN: SubscriptionStatus
Пример кода (с SubscriptionStatus.OK, поэтому для получения желаемого эффекта необходимо установить для него отмену подписки): веб-службы Exchange.NET > Учебное пособие> Push-уведомление о событии
Обновление 2 от diegog работает, то есть, если мы отправляем ответ со статусом отказа от подписки, обмен отменяет подписку на push-уведомление, и вы больше не получаете никаких дальнейших уведомлений.
Единственная проблема с ним заключается в том, что он отменяет подписку на всю подписку, т. Е. Если у вас есть несколько подписок, то ответ со статусом отмены подписки приведет к тому, что обмен отменит подписку на всю подписку.