2015-03-25 2 views
2

Так что я в настоящее время создаю приложение, которое позволяет группе пользователей просматривать все электронные письма с определенного адреса электронной почты. Все это работает правильно. Проблема, с которой я сталкиваюсь, возникает, когда я пытаюсь получить вложения.Получение вложения с использованием EWS и C# с ошибкой ServiceMethodException

Я относительно новый для этой области и использовал пример от Microsoft нашел here. Сравните это мой код ниже:

protected internal override Stream GetAttachmentStreamFinal(MailAttachmentDetails attachment) 
    { 
     var response = m_service.GetAttachments(new[] { attachment.Id }, BodyType.Text, Enumerable.Empty<PropertyDefinitionBase>()); 
     if (response.OverallResult != ServiceResult.Success) 
     { 
      if (response.Count > 0) 
      { 
       var ex = new MailException(response[0].ErrorMessage); 
       ex.Data.Add(response[0].ErrorCode, response[0].ErrorMessage); 
       foreach (var ed in response[0].ErrorDetails) 
       { 
        ex.Data.Add(ed.Key, ed.Value); 
       } 
       throw ex; 
      } 
      throw new MailException("Error occurred while fetching the attachment from the mail service."); 
     } 

     foreach (var attachmentResponse in response) 
     { 
      if (attachmentResponse.Attachment is FileAttachment) 
      { 
       var fa = attachmentResponse.Attachment as FileAttachment; 
       var cs = new MemoryStream(fa.Content); 
       fa.Load(cs); 
       cs.Seek(0, SeekOrigin.Begin); 
       return cs; 
      } 
     } 
     return null; 
    } 

Как вы можете видеть оба набора кода очень похож. Однако, когда я пошагово и добраться до attachmentResponse.Attachment это FileAttachment линии я получаю эту ошибку брошенную

Покушение методом «Mail.ExchangeEmailService.GetAttachmentStreamFinal (Mail.MailAttachmentDetails)» для метода доступа «Microsoft.Exchange.WebServices .Data.GetAttachmentResponse.get_Attachment() 'не удалось.

Все проходит правильно и ответ возвращается как успех.

Я заметил, когда я прошел через свой код, который приложение показывает как непубличный. Но поскольку это инкапсулировано в классе Microsoft, я не уверен, почему это так или что я могу сделать?

+0

Вы делаете это из почтового приложения (который работает внутри Outlook)? Образец, который вы связали, предназначен для почтовых приложений и сложнее обычного приложения EWS. –

+0

Это не работает в веб-приложении. и это используется, когда клиент запрашивает файл – Major

+0

. Я также сталкиваюсь с той же проблемой, пока я использовал последнюю версию формы сборки nuget, но когда я ссылаюсь на сборку после установки с [MSI] (http://www.microsoft.com /en-us/download/details.aspx?id=42951) он работает. Вы столкнулись с каким-то устойчивым решением проблемы? – Hitendra

ответ

2

Убедитесь, что у вас установлена ​​последняя версия Microsoft.Exchange.WebServices.dll. Старые версии не вернули фактические данные привязки при вызове этой конкретной перегрузки метода GetAttachments.

+0

Im, использующий версию 2.2, которую я загрузил из [link] (http://www.microsoft.com/en-us/download/details.aspx?id=42951) Это правильно? Свойства говорят, что Version 15.0.0.0 и Runtime Version 2.0.50727 – Major

+1

В конце вы были правы.Я ссылался на него, но в моей сборке он все еще использовал старую версию 14. – Major

+0

Убедитесь, что у вас есть правильная версия, зарегистрированная в GAC. Мог бы спасти меня несколько часов сегодня ... – MattheW

3

Я просто хочу расширить ответ на @Jason Johnstons.

По какой-то причине версия EWS в NuGet неверна. Он выдает ошибку, которую вы испытываете.

Обходной путь, чтобы удалить ссылку на пакет NuGet через

Uninstall-Package Microsoft.Exchange.WebServices 

Затем скачать и запустить файл здесь

https://www.microsoft.com/en-us/download/details.aspx?id=42951

от MSI Это установит DLL, которые требуются по умолчанию местоположение

[ C:\Program Files\Microsoft\Exchange\Web Services\2.2 ] 

Тогда s подразумевают, что они скопировали их в ваш каталог lib (или такой) и создали ссылки на библиотеки DLL напрямую.

Кредит: http://www.resolvinghere.com/sm/microsoftexchangewebservicesdatagetattachmentresponsegetattachment-failed.shtml

+0

MS должен был зафиксировать это в каналах NuGet уже сейчас! Все еще нужно было сделать это с апреля 2017 года. – Monty0018

+0

Это действительно помогло мне –

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