Начало работы с веб-службами Exchange 2010
мне было поручено написать веб-службу SOAP в .Net, чтобы быть промежуточным программным обеспечением между EWS2010 и сервером приложений, который ранее использовал WebDAV для подключения к Exchange. (как я понимаю, WebDAV уходит с EWS2010, поэтому сервер приложений больше не сможет подключаться, как это было раньше, и экспоненциально сложнее подключиться к EWS без WebDAV. Теория заключается в том, что делать это в .Net должно быть проще, чем что-либо еще... Правильно?!)
моя конечная цель состоит в том, чтобы быть в состоянии get и создания/обновления электронная почта, элементы календаря, контакты и элементы списка дел для указанной учетной записи Exchange. (Удаление в настоящее время не требуется, но я могу построить его для дальнейшего рассмотрения, если это достаточно просто).
мне изначально дали пример кода, который на самом деле работал, но я быстро понял, что он устарел. Используемые типы и классы нигде не отображаются текущая документация.
например, для создания соединения с сервером Exchange использовался метод:
ExchangeService svc = new ExchangeService();
svc.Credentials = new WebCredentials(AuthEmailAddress, AuthEmailPassword);
svc.AutodiscoverUrl(AutoDiscoverEmailAddress);
для чего это стоит, это использовало сборку, которая поставляется с образцом кода:Microsoft.Exchange.WebServices.dll
("конюшни").
прежде чем я понял, что это не текущий стандартный способ выполнения соединения, и он работал, я попытался построить на нем и добавить метод для создания элементов календаря, который я скопировать из вот!--29-->:
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).
я исключил сборку MEWS, что только ухудшило ситуацию. Я перешел от нескольких ошибок и предупреждений к 25 ошибкам и 2510 предупреждениям. Все виды и методы не были найдены. Здесь явно что-то не так.
дополнительные шаги, которые он принимает в VS2008), и я думаю, что я вернулся на правильный путь.я удалил (фактически, на данный момент, просто исключил) все предыдущие сборки, которые я пытался; и я добавил ссылку на службу для https://my.exchange-server.com/ews/services.wsdl
теперь у меня только 1 ошибка и 1 предупреждение.
предупреждение:
Элемент "transport" не может содержать дочерний элемент "extendedProtectionPolicy", поскольку модель содержимого родительского элемента пуста.
данное изменение, которое было сделано в интернете.config, когда я добавил ссылку на службу; и я только что нашел что вот так. Я прокомментировал этот раздел, как указано, и это действительно заставило предупреждение уйти, поэтому woot для этого.
ошибка не была так легко обойти, хотя:
ошибка:
Тип или имя пространства имен Не удалось найти "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.wsdl -- но это кажется лучшим / самым дальним, что я получил до сих пор), я чувствую, что я летаю вслепую.
я знаю, что мне нужно выяснить, что это должно заменить ExchangeService
/ ExchangeServiceBinding
, реализовать это, а затем работать через любые ошибки, возникающие в результате этого переключателя...
но у меня нет идея, как это сделать, или где искать как это сделать. Googling "ExchangeService" и "ExchangeServiceBinding", похоже, приводят только к устаревшим сообщениям в блогах и MSDN, ни один из которых до сих пор не оказался ужасно полезным.
что я должен заменить ExchangeService
/ ExchangeServiceBinding
С? Есть ли какое-то другое место, которое документы, работающие с EWS, лучше, чем MSDN?
1 ответов
Я бы рекомендовал перейти к управляемому API EWS. Это намного проще в использовании, чем пытаться собрать все вместе самостоятельно. Он поддерживает как Exchange 2007 SP1, так и Exchange 2010. Я думаю, вы найдете его намного проще в использовании и, вероятно, устраните свои проблемы.
Версия 1: Вот это скачать с Microsoft.
и вот это документы MSDN.
для версии 2 (Спасибо @ ruffin!)
добавлено вопросом asker:
Дополнительные ссылки, которые оказались полезными:
- настройка URL-адреса службы (вручную или через Автообнаружение)
- работа с управляемым API EWS - некоторая базовая документация по общим задачам
- Скачать для EWS управляемый установщик API - как же скачать выше; также включает немного документации и данных intellisense для visual studio.