【发布时间】:2011-10-15 14:13:51
【问题描述】:
我正在处理一个外部应用程序尝试获取 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 信息: “此错误表明 Exchange Web 服务在尝试完成 GetUserAvailability 请求时向另一台客户端访问服务器发送的请求无效。此响应代码通常表示发生了配置或权限错误,或者有人尝试模拟可用性失败代理请求。”
我遇到的问题是,在我拉回用户的邮件和日历文件夹的情况下,模拟似乎是如何工作的,但在我想检查其可用性的情况下却不起作用。
现在,我只是通过 curl 发送直接的 XML(包装在一个小的 python 脚本中)。
有人指点一下吗?提前致谢!
【问题讨论】:
标签: calendar exchange-server impersonation exchangewebservices