首页 > 解决方案 > SubscribeToStreamingNotifications 中的异常

问题描述

我现在收到邮箱异常已经有一段时间了,自上个月以来甚至没有一次成功订阅流媒体。

例外: 无法连接到用户邮箱数据库 guid:67f43d90-xxxx-xxxx-xxxx-7a296a993f38 的邮箱,因为 ExchangePrincipal 对象包含过时的信息。邮箱最近可能已被移动。

我创建订阅的代码:

 private void CreateSubscription()
        {
            var events = new List<EventType>
            {
                EventType.NewMail,
                EventType.Created,
                EventType.Deleted,
                EventType.Modified,
                EventType.Moved,
                EventType.Copied,
                EventType.FreeBusyChanged
            };

            if (_subscription != null)
            {
                ((StreamingSubscription)_subscription).Unsubscribe();
                _connection.RemoveSubscription((StreamingSubscription)_subscription);
            }

            _subscription = _exchange.SubscribeToStreamingNotifications(subscriptionFolders, events.ToArray());
            _connection.AddSubscription((StreamingSubscription)_subscription);

            if (stopwatch.IsRunning)
            {
                stopwatch.Restart();
                var e = stopwatch.ElapsedMilliseconds;
                logger.LogFatal($"Stopwatch restarted: {e}");
            }
            else
            {
                stopwatch.Start();
                var e = stopwatch.ElapsedMilliseconds;
                logger.LogFatal($"Stopwatch started: {e}");
            }
        }

异常发生在以下行:

_subscription = _exchange.SubscribeToStreamingNotifications(subscriptionFolders, events.ToArray());

堆栈跟踪:

Microsoft.Exchange.WebServices.Data.ServiceResponseException: The specified object was not found in the store., Can't connect to the mailbox of user Mailbox database guid: 67f43d90-xxxx-xxxx-xxxx-7a296a993f38 because the ExchangePrincipal object contains outdated information. The mailbox may have been moved recently.
   at Microsoft.Exchange.WebServices.Data.ServiceResponse.InternalThrowIfNecessary()
   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
   at Microsoft.Exchange.WebServices.Data.ExchangeService.SubscribeToStreamingNotifications(IEnumerable`1 folderIds, EventType[] eventTypes)
   at Mach.Omega.EwsClient.WinService.Classes.ExchangeServiceClient.CreateSubscription() in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.EwsClient.WinService\Mach.Omega.EwsClient.WinService\Classes\ExchangeServiceClient.cs:line 172
   at Mach.Omega.EwsClient.WinService.Classes.ExchangeServiceClient.CreateSubscription(IEnumerable`1 subscriptionFolders) in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.EwsClient.WinService\Mach.Omega.EwsClient.WinService\Classes\ExchangeServiceClient.cs:line 131
   at Mach.Omega.EwsClient.WinService.Classes.SubcriptionProcess.Subscribe() in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.EwsClient.WinService\Mach.Omega.EwsClient.WinService\Classes\SubcriptionProcess.cs:line 154
   at Mach.Omega.EwsClient.WinService.EwsService.SubscriptionWorker() in D:\Sourcecode\Mach.Omega\Sourcecode\Mach.Omega.EwsClient.WinService\Mach.Omega.EwsClient.WinService\EwsService.cs:line 200
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()

请注意,我可以从邮箱中提取电子邮件,但无法创建流订阅。

标签: exchange-serverexchangewebservices

解决方案


这是 OnPrem 还是 Office365?作为一般规则,您应该始终使用 X-AnchorMailbox 标头https://blogs.msdn.microsoft.com/webdav_101/2018/06/16/best-practices-important-and-critical-headers-for-ews/,该错误指示路由问题或过时的目录信息(可能由 AD 中的复制问题引起)。如果它的 Office365 尝试将 MailboxGUID 作为 X-AnchorMailbox https://developer.microsoft.com/en-us/office/blogs/error-improvement-for-invalid-x-anchormailbox-in-rest-api-calls/


推荐阅读