Для меня определили задачу с записью веб-сервиса 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?
Я бы рекомендовал перейти на управляемый EWS API. Это намного проще, чем пытаться собрать все самостоятельно. Он поддерживает как Exchange 2007 SP1, так и Exchange 2010. Я думаю, вы найдете его намного проще в использовании и, вероятно, устраните ваши проблемы.
Версия 1: Это загрузка с сайта Microsoft .
А вот документы MSDN .
Для версии 2 (спасибо @ruffin!)
Дополнительные ссылки, которые оказались полезными: