exchange-server - 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()
请注意,我可以从邮箱中提取电子邮件,但无法创建流订阅。
解决方案
这是 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/
推荐阅读
- asp.net - 经典的 ASP 连接工作;.Net 失败。为什么?
- arrays - 每次单击按钮时如何获得不同的 UIImage 数组?
- javascript - 如何将整数数组增加 1
- python - 带有 MySQL db 的 Turbogears2 不更新多线程中的表
- php - 如何修复“警告:为 foreach() 提供的参数无效”
- javascript - navigator.onLine 不一致
- python - 试图允许用户在 Hangman 代码中使用大写或小写字母
- vmware - Vmware 工作站不支持 Windows 10 虚拟机上的休眠吗?
- regex - 使用正则表达式格式化文本
- java - Spring Boot 2 的非阻塞 IO