Я поддерживаю службу, написанную для синхронизации контактов с EWS (ExchangeWebService). Эта услуга обновляет контакты, которые перестали работать в последнее время. Исключение брошено является DeleteAttachmentExceptionОшибка обмена при удалении приложения
Первоначально код выглядел следующим образом:
contact.SetContactPicture(filePath);
contact.Update(ConflictResolutionMode.AlwaysOverwrite); // throws the excpetion
Eventhough только он «переписывает» contactpicture, кажется, старый будет удален первым внутренне, следовательно, сообщение об ошибке Я полагаю.
Так я попытался вручную убедиться в удалении первого, , которая не является soloution либо:
if(contact.HasPicture)
{
contact.RemoveContactPicture();
contact.Update(ConflictResolutionMode.AlwaysOverwrite); // throws the Exception
}
При создании новых контактов, это работает отлично. Он отображает Contactpicture. Однако обновление существующих не работает.
К сожалению Исключение оленья кожа дает много информации:
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 (владелец почтового ящика).
ОБНОВЛЕНИЕ
Я сделал это полностью independet ли Приложение является 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);
}
I "dirtyfixed" это путем вызова _item.Load() вместо этого. Неплохо обновить вопрос завтра после внедрения списка. (Вся реализация, которую я поддерживаю, есть большой беспорядок, так что это может занять некоторое время) – CSharpie
Странно, теперь он работает отлично. Во всяком случае, я реализовал весь этот tracelistnerthing для следующего раза. Спасибо. – CSharpie