2014-02-10 7 views
1

Я поддерживаю службу, написанную для синхронизации контактов с 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); 
} 

ответ

1

Вы правы, что управляемый API EWS внутренне удаляет старое вложение перед сохранением нового. Ошибка, которую вы получаете, связана с проблемой связи с сервисом. Если ваш код работал до этого, я предполагаю, что что-то изменилось в отношении прав пользователя, выполняющего этот код.

Итак, первое, что я предлагаю вам проверить, это разрешения пользователя. Во-вторых, если это не решит проблему для вас, я бы предложил добавить прослушиватель трассировки к вашему коду и отправить запрос и ответ EWS, чтобы мы могли отслеживать это немного дальше. Вот статья, которая должна помочь вам с следовых слушателя:

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

Я надеюсь, что это помогает.

+0

I "dirtyfixed" это путем вызова _item.Load() вместо этого. Неплохо обновить вопрос завтра после внедрения списка. (Вся реализация, которую я поддерживаю, есть большой беспорядок, так что это может занять некоторое время) – CSharpie

+0

Странно, теперь он работает отлично. Во всяком случае, я реализовал весь этот tracelistnerthing для следующего раза. Спасибо. – CSharpie

Смежные вопросы