Подтвердить что ты не робот

Начало работы с Exchange Web Services 2010

Мне было поручено написать веб-сервис SOAP в .Net, чтобы быть промежуточным программным обеспечением между EWS2010 и сервером приложений, который ранее использовал WebDAV для подключения к Exchange. (Как я понимаю, WebDAV уходит с EWS2010, поэтому сервер приложений больше не сможет подключаться, как это было ранее, и экспоненциально сложнее подключиться к EWS без WebDAV. Теория заключается в том, что это делается в .NET. должно быть проще, чем что-либо еще... Правильно?!)

Моя конечная цель - иметь возможность получать и создавать/обновлять электронную почту, элементы календаря, контакты и список дел для указанной учетной записи Exchange. (Удаление в настоящее время не требуется, но я могу создать его для будущего рассмотрения, если это будет достаточно просто).

Мне изначально дали пример кода, который действительно работал, но я быстро понял, что он устарел. Используемые типы и классы нигде не отображаются в текущей документации.

Например, метод, используемый для создания соединения с сервером Exchange, был следующим:

ExchangeService svc = new ExchangeService();
svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
svc.AutodiscoverUrl(AutoDiscoverEmailAddress);

Для чего это стоило, это использовало сборку, которая поставлялась с образцом кода: Microsoft.Exchange.WebServices.dll ( "MEWS" ).

Прежде чем я понял, что это не текущий стандартный способ выполнить соединение, и он сработал, я попытался построить его и добавить метод для создания элементов календаря, который я скопировано здесь:

static void CreateAppointment(ExchangeServiceBinding esb)
{
    // Create the appointment.
    CalendarItemType appointment = new CalendarItemType();

    ...
}

Сразу же, я столкнулся с разницей между ExchangeService и ExchangeServiceBinding ( "ESB" ); поэтому я начал использовать Googling, чтобы попытаться выяснить, как получить определение ESB, чтобы метод CreateAppointment скомпилировался. Я нашел это сообщение в блоге, в котором объясняется, как создать прокси-класс из WSDL, который я сделал.

К сожалению, это вызвало некоторые конфликты, в которых типы, которые были определены в исходной сборке, Microsoft.Exchange.WebServices.dll (которая поставляется вместе с образцом кода) перекрывались с типами в моей новой сборке EWS.dll (которую я скомпилировал из кода, сгенерированного из services.wsdl, предоставляемый сервером Exchange).

Я исключил сборку MEWS, которая только ухудшила ситуацию. Я перешел от нескольких ошибок и предупреждений к 25 ошибкам и 2,510 предупреждениям. Все виды типов и методов не найдены. Здесь что-то явно не так.

Итак, я вернулся на охоту. Я нашел инструкции по добавлению ссылок на службы и веб-ссылок (т.е. дополнительные шаги, которые необходимо предпринять в VS2008), и я думаю, что вернусь к правая дорожка.

Я удалил (фактически, на данный момент, просто исключил) все предыдущие сборки, которые я пытался; и я добавил ссылку на службу для https://my.exchange-server.com/ews/services.wsdl

Теперь мне осталось всего 1 ошибка и 1 предупреждение.

Внимание:
Элемент 'transport' не может содержать дочерний элемент 'extendedProtectionPolicy', потому что модель содержимого родительского элемента пуста.

Это относится к изменению, которое было внесено в web.config, когда я добавил ссылку на службу; и я только что нашел исправление для этого здесь на SO. Я прокомментировал этот раздел, как указано, и это сделало предупреждение утихшим, так что стреляйте для этого.

Ошибка не была так легко обойти, хотя:

Ошибка:
Не удалось найти имя типа или пространства имен" ExchangeService" (вам не хватает директивы using или ссылки на сборку?)

Это относится к функции, которую я использовал для создания соединения EWS, вызываемого каждым из веб-методов:

private ExchangeService getService(String AutoDiscoverEmailAddress, String AuthEmailAddress, String AuthEmailPassword)
{
    ExchangeService svc = new ExchangeService();
    svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
    svc.AutodiscoverUrl(AutoDiscoverEmailAddress);
    return svc;
}

Эта функция отлично работала с сборкой MEWS из кода примера, но тип ExchangeService больше не доступен. (Не ExchangeServiceBinding, это было первое, что я проверил.)

На этом этапе, так как я не выполняю никаких указаний из документации (я не смог найти нигде в документации, которая говорила, чтобы добавить ссылку на службу на ваш сервер Exchange services.wsdl - но это похоже лучший/самый дальний, который я получил до сих пор), я чувствую, что я летел слепой.

Я знаю, что мне нужно выяснить, что это такое, что должно заменить ExchangeService/ExchangeServiceBinding, реализовать это, а затем работать через любые ошибки, возникающие в результате этого переключателя...

Но я понятия не имею, как это сделать или где искать, как это сделать. Googling "ExchangeService" и "ExchangeServiceBinding", похоже, только вернулись к устаревшим сообщениям в блогах и MSDN, ни одна из которых до сих пор не оказалась очень полезной.

Что мне следует заменить ExchangeService/ExchangeServiceBinding на? Есть ли другое место, где документы, работающие с EWS, лучше, чем MSDN?

4b9b3361

Ответ 1

Я бы рекомендовал перейти к API управляемого EWS. Это намного проще в использовании, чем пытаться совместить все вместе. Он поддерживает Exchange 2007 с пакетом обновления 1 (SP1) и Exchange 2010. Я думаю, вы найдете его намного проще в использовании и, вероятно, устраните ваши проблемы.

Версия 1: Ниже приведена загрузка из Microsoft.

И вот документы MSDN.

Для версии 2 (спасибо @ruffin!)

Download - Документы MSDN


Добавил вопрос:

Дополнительные ссылки, которые оказались полезными: