【发布时间】:2017-03-23 14:06:19
【问题描述】:
以下 EWS 调用偶尔会产生 401 错误(每 1000 封电子邮件中有 1 封)已处理。
emailMessage.Load(propertySet);
emailMessage.Move(WellKnownFolderName.DeletedItems);
关于问题是什么的任何想法?电子邮件驻留在收件箱中,并受到许多规则扫描(由于驻留在收件箱中),但规则不会将它们从收件箱中删除。稍后重新处理同一电子邮件将成功。凭据或仅具有静态引用的 propertySet 没有问题。就好像 emailMessage 虽然是从 service.FindItems() 检索到的,但具有临时权限。我在 EWS 日志中没有看到任何相应的错误。
为了澄清,应用于收件箱的规则正在移动其他电子邮件。严格来说,我不知道 ES(+message labs)在将电子邮件放入收件箱之前是否应用了规则(例如跨度检查等)。如果在插入后应用,我可以理解可能有 2 个进程针对收件箱工作,可能同时进行。如果是这样,我不知道可能会产生什么影响。这都是猜测 - 我不知道这是否与我的问题有关。但是,异常表明 401 来自 EWS 响应,即使我在 EWS 日志中没有找到相同的内容。
Error: Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. The remote server returned an error: (401) Unauthorized. ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
--- End of inner exception stack trace ---
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalLoadPropertiesForItems(IEnumerable`1 items, PropertySet propertySet, ServiceErrorHandling errorHandling)
at Microsoft.Exchange.WebServices.Data.Item.InternalLoad(PropertySet propertySet)
Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. The remote server returned an error: (401) Unauthorized. ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
--- End of inner exception stack trace ---
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)
at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest(IEwsHttpWebRequest& request)
at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalMoveItems(IEnumerable`1 itemIds, FolderId destinationFolderId, Nullable`1 returnNewItemIds, ServiceErrorHandling errorHandling)
at Microsoft.Exchange.WebServices.Data.ExchangeService.MoveItem(ItemId itemId, FolderId destinationFolderId)
at Microsoft.Exchange.WebServices.Data.Item.Move(FolderId destinationFolderId)
at Microsoft.Exchange.WebServices.Data.Item.Move(WellKnownFolderName destinationFolderName)
【问题讨论】:
-
如果看起来是零星的,您可以尝试添加瞬态错误处理。或者 .. 给我们一个完整的例外。
-
我可能会回退到重试策略,没有意识到这是一个如此正式的模式 - 谢谢。不过如果能解决核心问题就好了。