как отписаться от 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, но это только для операций извлечения

Итак, что мне делать?


person pm100    schedule 07.02.2014    source источник
comment
Возможно, вы можете улучшить форматирование кода в вопросе и добавить еще несколько подходящих тегов, чтобы охватить больше людей. Хотя понятия не имею, вопрос звучит интересно   -  person Daniel W.    schedule 10.02.2014


Ответы (2)


Кажется, нет способа отписаться от push-уведомлений. Единственный вариант - выждать время.

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

Кнопка «Отменить подписку» в настоящее время ничего не делает, так как отмена подписки не реализована в управляемом API. В какой-то момент я реализую отмену подписки, хотя это не слишком важно, так как после закрытия прослушивателя подписка истечет через некоторое время, когда Exchange не получит ответ (или не сможет подключиться) к конечной точке прослушивателя.

Кстати, документация MSDN рекомендует использовать потоковую передачу, а не push-уведомления:

From: подписки на уведомления, события почтового ящика и EWS в Exchange

Если вы используете push-уведомления с Exchange 2010, подумайте об обновлении своего приложения для использования потоковых уведомлений, чтобы вам не требовалось отдельное приложение для получения событий.

Обновить

Другой источник: Переход на уведомления веб-служб Exchange

Нас также часто спрашивают, как работают тайм-ауты push-уведомлений. Допустим, ваш клиент подписался на push-уведомления, а потом неожиданно уходит в офлайн. Сервер не сможет отправить следующий набор событий в качестве уведомлений клиенту (или, что более важно, сервер не получит ответа на свое сообщение с уведомлением). Вместо того, чтобы сразу сдаться, сервер повторит попытку вытолкнуть их до трех раз. После первого сбоя сервер будет ждать тайм-аут (это тайм-аут, который вы установили в запросе на подписку) и повторите попытку. Если эта попытка не удалась, сервер подождет в два раза больше тайм-аута и попытается снова. Если это не удается, сервер подождет в три раза больше тайм-аута и повторит попытку. Наконец, если третья повторная попытка окажется неудачной, сервер сдастся и удалит подписку.

Обновление 2

Похоже, что за пределами управляемого API вы можете прекратить подписку, вернув Отменить подписку в элементе SubscriptionStatus вместо OK.

Таким образом, есть два способа завершить подписку на CAS:

  1. Вы можете отправить «Отписаться» в ответном сообщении (как ответ на уведомление от CAS).
  2. Вы можете перестать отвечать на уведомления.

Мы рекомендуем первый метод (отправка сообщения об отказе от подписки), а не второй метод, который заставляет сервер клиентского доступа выполнять ненужную работу.

MSDN: Статус подписки

Пример кода (с SubscriptionStatus.OK, поэтому для получения желаемого эффекта необходимо установить для него значение «Отписаться»): Exchange Web Services .NET › Учебное пособие › Push-уведомление о событии

person diegog    schedule 10.02.2014
comment
не могу использовать потоковые уведомления, потому что это слишком ресурсоемко (много простаивающих TCP-соединений), и в любом случае у меня есть хорошее большое серверное приложение - person pm100; 11.02.2014
comment
первое, что вы заметите, фактически повторяет мою точку зрения: управляемый API-интерфейс EWS не имеет метода отмены подписки. Это не обязательно означает, что вы можете это сделать. Кстати, если я не получу лучшего ответа, тогда ты выиграл, потому что ты нашел материал о тайм-ауте - person pm100; 11.02.2014
comment
Да, для PUSH-уведомлений нет отписок, только для PULL. Кстати, я не думаю, что потоковые уведомления настолько интенсивны, поскольку вы можете получать уведомления для нескольких МБ по одному соединению. С PUSH у вас есть эти короткие сеансы TCP, инициированные для уведомлений каждого МБ, поэтому спорный вопрос, что более эффективно. - person pjneary; 13.02.2014

Обновление2 от diegog действительно работает, т. е. если мы отправим ответ со статусом отказа от подписки, обмен отменит подписку на push-уведомление, и после этого вы не получите никаких дальнейших уведомлений.

Единственная проблема с ним заключается в том, что он отменяет всю подписку, т.е. если у вас несколько подписок, то ответ со статусом отписки заставит биржу отписаться от всей подписки.

person ankit gupta    schedule 05.07.2016