Начало работы с веб-сервисами Exchange 2010

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

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

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

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

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

Если это имеет значение это использовало блок, который шел с примером кода: Microsoft.Exchange.WebServices.dll ("МЬЮЗ").

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

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

    ...
}

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

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

Я исключил блок МЬЮЗА, который только сделал вещи хуже. Я пошел от горстки ошибок и предупреждений 25 ошибкам и 2 510 предупреждений. Все виды типов и методов не были найдены. Что-то явно неправильно, здесь.

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

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

Теперь я всего до 1 ошибки и 1 предупреждения.

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

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

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

Ошибка:
Тип или имя пространства имен 'ExchangeService' не мог быть найден (Вы пропускаете директиву использования или ссылку на сборку?)

Это в отношении функции, которую я использовал для создания соединения 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;
}

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

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

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

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

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

24
задан Community 23 May 2017 в 12:34
поделиться

1 ответ

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

Версия 1: Это загрузка с сайта Microsoft .

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

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

Загрузить - Документы MSDN


Добавлено пользователем, задавшим вопрос:

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

38
ответ дан 28 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: