Потоковые уведомления не работают с 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);