Потоковые уведомления не работают с Office 365 / Exchange Online

Я разработал небольшое консольное приложение для тестирования потоковых подписок / уведомлений EWS. В прошлом мы использовали Push-уведомления, но, теоретически, при использовании StreamingNotifications я должен был избегать создания конечной точки http слушателя и всех проблем с ней (брандмауэр и т. Д.).

Итак, с моей локальной машины; Я делаю это:

static void Main(string[] args)
    {
        if (String.IsNullOrEmpty(ConfigurationManager.AppSettings["PrimaryLabUserId"]))
        {
            throw new ArgumentNullException("Please provide a value for PrimaryLabUserId in app.config");
        }
        _primaryLabUserId = ConfigurationManager.AppSettings["PrimaryLabUserId"];

        string ServiceAccountName = ConfigurationManager.AppSettings["ExchangeServiceAccountName"];
        string ServiceAccountPassword = ConfigurationManager.AppSettings["ExchangeServiceAccountPassword"];


        _service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        _service.Credentials = new WebCredentials(ServiceAccountName, ServiceAccountPassword);
        _service.AutodiscoverUrl(_primaryLabUserId, (x) => true);
        _ewsUrl = _service.Url.AbsoluteUri;

        var _connection =  new StreamingSubscriptionConnection(_service, 30);

        var sub = SubscribeForStreamingNotifications();

        _connection.AddSubscription(sub);

        _connection.OnDisconnect +=
            new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnDisconnect);

        // set up subscriptions here.
        _connection.OnNotificationEvent +=
                    new StreamingSubscriptionConnection.NotificationEventDelegate(OnNewMail);

        _connection.Open();
        Console.WriteLine("Listening streaming...");
        Console.ReadLine();


    }

public static StreamingSubscription SubscribeForStreamingNotifications()
    {

                   var folderIds = new List<FolderId>()
        {
            WellKnownFolderName.Inbox,
            WellKnownFolderName.Calendar
        };

                    var eventTypes = new List<EventType>();
        eventTypes.Add(EventType.NewMail);
        eventTypes.Add(EventType.Deleted);
        eventTypes.Add(EventType.Moved);
        eventTypes.Add(EventType.Created);
        eventTypes.Add(EventType.Modified);

        return _service.SubscribeToStreamingNotifications(folderIds, eventTypes.ToArray());
    }

private static void OnNewMail(object sender, NotificationEventArgs args)
    {
        var test = args;
        Console.WriteLine("Incoming");
    }

Подписка инициализируется нормально, но когда я отправляю новое письмо в LabUser, ничего не происходит. Событие уведомления никогда не срабатывает. Я попробовал то же самое с pushnotifications, и это работало (на другом сервере с общедоступной конечной точкой http для обмена, чтобы перезвонить). Мне было интересно, может ли это иметь какое-либо отношение к моей локальной машине.

1 ответ

Решение

Как очень глупо с моей стороны. Я забыл выдать себя за. Поскольку я звоню в EWS с учетной записью службы, она, конечно, прослушивает почтовый ящик этой учетной записи, если вы не укажете:

 _service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, _primaryLabUserId);
Другие вопросы по тегам