Мне было поручено написать веб-сервис 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?