Начало работы с Exchange Web Services 2010 - PullRequest
24 голосов
/ 18 марта 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 ошибок и 2510 предупреждений. Все виды типов и методов не были найдены. Здесь что-то явно не так.

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

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

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

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

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

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

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

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

* * 1068

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

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

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

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

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

1 Ответ

38 голосов
/ 24 марта 2010

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

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

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

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

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


Добавлено вопрос задающим:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...