Я работаю над проектом, в котором внешнее приложение пытается получить информацию о доступности (Свободно / Занято) вместе с деталями (Расположение / Тема / и т. Д.) Для группы пользователей в Exchange 2010.
Я прочитал достаточно, и думаю, что лучший способ сделать это - через служебную учетную запись, запущенную приложением, которое выдает себя за данного пользователя и извлекает информацию из календаря.
Я настроил олицетворение для учетной записи службы и запустил базовый тест, обнаруженный в technet: http://msdn.microsoft.com/en-us/library/bb204088(v=exchg.140).aspx
Это работает для вытягивания папки почтового ящика (как в примере) и если попытаться вытянуть обратно папку календаря.
Я также нашел, как получить доступ через technet:
http://msdn.microsoft.com/en-us/library/aa563800(v=exchg.140).aspx
это также будет работать, если я войду в систему как пользователь, для которого пытаюсь найти информацию календаря.
Проблема возникает, когда я пытаюсь объединить XML олицетворения с доступностью get. Вот что у меня есть для двух комбайнов:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
<t:ExchangeImpersonation>
<t:ConnectingSID>
<t:PrincipalName>[usersname@myorg.org]</t:PrincipalName>
</t:ConnectingSID>
</t:ExchangeImpersonation>
</soap:Header>
<soap:Body>
<GetUserAvailabilityRequest xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<t:TimeZone xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Bias>300</Bias>
<StandardTime>
<Bias>0</Bias>
<Time>02:00:00</Time>
<DayOrder>1</DayOrder>
<Month>11</Month>
<DayOfWeek>Sunday</DayOfWeek>
</StandardTime>
<DaylightTime>
<Bias>-60</Bias>
<Time>02:00:00</Time>
<DayOrder>2</DayOrder>
<Month>3</Month>
<DayOfWeek>Sunday</DayOfWeek>
</DaylightTime>
</t:TimeZone>
<MailboxDataArray>
<t:MailboxData>
<t:Email>
<t:Address>[usersname@myorg.org]</t:Address>
</t:Email>
<t:AttendeeType>Required</t:AttendeeType>
<t:ExcludeConflicts>false</t:ExcludeConflicts>
</t:MailboxData>
</MailboxDataArray>
<t:FreeBusyViewOptions>
<t:TimeWindow>
<t:StartTime>2011-07-28T00:00:00</t:StartTime>
<t:EndTime>2011-07-28T23:59:59</t:EndTime>
</t:TimeWindow>
<t:MergedFreeBusyIntervalInMinutes>5</t:MergedFreeBusyIntervalInMinutes>
<t:RequestedView>DetailedMerged</t:RequestedView>
</t:FreeBusyViewOptions>
</GetUserAvailabilityRequest>
</soap:Body>
</soap:Envelope>
Что я получаю, так это:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/exchange/services/2006/types">a:ErrorProxyRequestNotAllowed</faultcode>
<faultstring xml:lang="en-US">Client context header found but no request type found in SOAP header.</faultstring>
<detail>
<m:ErrorCode xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">5015</m:ErrorCode>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
Еще немного покопаться в technet, ErrorProxyRequestNotAllowed info:
«Эта ошибка указывает на то, что запрос, отправленный веб-службами Exchange на другой сервер клиентского доступа при попытке выполнить запрос GetUserAvailability, был недействительным. Этот код ответа обычно указывает, что произошла ошибка конфигурации или прав или что кто-то безуспешно пытался имитировать доступность запрос прокси. "
У меня проблемы с тем, как олицетворение работает в тех случаях, когда я возвращаю почтовые и календарные папки пользователя, но не работаю в случае, когда я хочу проверить их доступность.
Прямо сейчас я просто отправляю прямой XML через curl (завернутый в небольшой скрипт на python).
У кого-нибудь есть указатели? Заранее спасибо!