我正在维护一个用于与EWS(ExchangeWebService)同步联系人的服务。 此服务正在更新最近停止工作的contactpictures。 抛出的异常是 DeleteAttachmentException
最初代码看起来像这样:
contact.SetContactPicture(filePath);
contact.Update(ConflictResolutionMode.AlwaysOverwrite); // throws the excpetion
尽管它只是“覆盖”了contactpicture,但似乎旧的内容首先被内部删除,因此我猜错误信息。
所以我试图先手动确定删除, 这也不是一个解决方案:
if(contact.HasPicture)
{
contact.RemoveContactPicture();
contact.Update(ConflictResolutionMode.AlwaysOverwrite); // throws the Exception
}
创建新联系人时,这很好用。它显示Contactpicture。但是现有的更新不起作用。
可悲的是,Exception并没有提供太多信息:
Microsoft.Exchange.WebServices.Data.DeleteAttachmentException ist aufgetreten.
_HResult=-2146233088
_message=At least one attachment couldn't be deleted.
HResult=-2146233088
IsTransient=false
Message=At least one attachment couldn't be deleted.
Source=Microsoft.Exchange.WebServices
StackTrace:
Microsoft.Exchange.WebServices.Data.AttachmentCollection.InternalDeleteAttachments(IEnumerable`1 attachments)
InnerException:
整个事情在usercontext(邮箱的所有者)中运行。
更新
我是完全独立的,无论附件是ContactPicture还是其他什么,仍然是相同的结果:
_item是一个ExchangeItem(已加载)
public void UpdateAttachment(string attachmentPath, string attachmentName)
{
Attachment attachment = _item.Attachments.SingleOrDefault(att => String.Equals(att.Name, attachmentName, StringComparison.OrdinalCultureIgnoreCase));
if (attachment != null)
{
_item.Attachments.Remove(attachment);
_item.Update(ConflictResolutionMode.AlwaysOverwrite);
}
attachment = _item.Attachments.AddFileAttachment(attachmentName, attachmentPath);
_item.Update(ConflictResolutionMode.AlwaysOverwrite);
}
答案 0 :(得分:1)
您是正确的,EWS托管API在保存新附件之前会在内部删除旧附件。您收到的错误是由于服务的通信问题。如果您的代码之前正在运行,我猜测有关运行此代码的用户的权限已发生变化。
所以我建议你检查的第一件事是用户的权限。其次,如果这不能解决您的问题,我建议您在代码中添加跟踪侦听器并发布您的EWS请求和响应,以便我们可以进一步跟踪这一点。这篇文章应该可以帮助您跟踪侦听器:
How to: Trace requests and responses to troubleshoot EWS Managed API applications
我希望这会有所帮助。