删除附件时出现Exchange错误

时间:2014-02-10 12:57:33

标签: c# web-services exchange-server exchangewebservices

我正在维护一个用于与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);
}

1 个答案:

答案 0 :(得分:1)

您是正确的,EWS托管API在保存新附件之前会在内部删除旧附件。您收到的错误是由于服务的通信问题。如果您的代码之前正在运行,我猜测有关运行此代码的用户的权限已发生变化。

所以我建议你检查的第一件事是用户的权限。其次,如果这不能解决您的问题,我建议您在代码中添加跟踪侦听器并发布您的EWS请求和响应,以便我们可以进一步跟踪这一点。这篇文章应该可以帮助您跟踪侦听器:

How to: Trace requests and responses to troubleshoot EWS Managed API applications

我希望这会有所帮助。