Exchange server Exchange 2010 Web服务-创建全天活动预约

Exchange server Exchange 2010 Web服务-创建全天活动预约,exchange-server,exchangewebservices,Exchange Server,Exchangewebservices,我在使用Exchange2010 Web服务(EWS)创建全天活动约会时遇到了麻烦 根据现有要求,创建全天事件约会对象需要指定开始和结束时间(即2011年10月20日12:00:00 AM)以及时区 但我的应用程序转换为使用EWS而不是WebDAV,将开始和结束时间转换为GMT(格林威治)时间,然后发送到Exchange服务器 这种技术在WebDAV上运行得非常好。 但有了EWS,我得到了一个奇怪的结果:约会持续3(三)天,而不是全天的活动约会 我的邮箱时区设置为太平洋标准时间(使用OWA接口)

我在使用Exchange2010 Web服务(EWS)创建全天活动约会时遇到了麻烦

根据现有要求,创建全天事件约会对象需要指定开始和结束时间(即2011年10月20日12:00:00 AM)以及时区

但我的应用程序转换为使用EWS而不是WebDAV,将开始和结束时间转换为GMT(格林威治)时间,然后发送到Exchange服务器

这种技术在WebDAV上运行得非常好。 但有了EWS,我得到了一个奇怪的结果:约会持续3(三)天,而不是全天的活动约会

我的邮箱时区设置为太平洋标准时间(使用OWA接口),Exchange服务器日期和时间也设置为太平洋标准时间

约会开始和结束时间分别设置为“2011-10-20T07:00:00.000Z”和“2011-10-21T07:00:00.000Z”。 就当地时间而言,这些时间分别为“2011年10月20日12:00:00 AM”和“2011年10月21日12:00:00 AM”(考虑夏令时)

如果约会对象的IsAllDayEvent属性设置为False–约会创建正确–不是全天,从2011年10月20日上午12点开始,到2011年10月21日上午12点结束,并且在Outlook日历中仅占用一天–2011年10月20日

但如果约会对象的isAllDayEvent属性设置为True(其余所有内容保持不变)-约会从2011年10月19日晚上9:00:00开始,到2011年10月21日晚上9:00:00结束,并且不是全天

可能是我做错了什么,但基于上述情况,我提出了以下问题:

  • EWS支持全天活动的格林威治时间吗?
    如果是–我可能会犯什么错误
我很感激你的建议。 真诚地
安德鲁

我自己正在做一个从DAV到EWS的转换。我遇到过一些可能感兴趣的问题(例如2007年,但我假设适用于Exchange 2010和2013)

当Exchange Web服务接收到创建新日历项的请求时,如果开始和结束属性由非UTC偏移字符串标识,则服务器必须将开始和结束属性转换为协调世界时(UTC),然后才能存储日历项。以下是转换为UTC的规则:

如果请求通过MeetingTimeZone属性包含明确的时区定义,服务器将根据时区定义的标准和日光规则应用正确的偏移量

如果未定义明确的时区,则将使用运行Exchange2007的计算机的当前时区(特别是处理请求的客户端访问服务器)

注: 在Exchange2007 SP1中,所有未指定的时区都设置为UTC,而不是客户端访问服务器的时区

通过一点实验,我发现如果不指定时区,EWS确实会将时间应用为UTC。如果IsAllDayEvent为true,则除了日期组件之外,还会忽略开始时间和结束时间。因此,一个全天的活动在我的日历上会变成UTC 12:00am-12:00am或5:00pm-5:00pm(我也是UTC-7)。最佳实践文章建议使用MeetingTimeZone元素,但我收到一个错误,它被折旧了,请改用StartTimeZone和EndTimeZone。事实上,添加似乎有效


就你3天的问题而言,我能够重现类似的结果。以下是我怀疑正在发生的事情。如果您告诉Exchange开始时间是上午7点,结束时间是上午8点,并全天标记它,它将自动将开始和结束时间设置为yyy-mm-ddT00:00:00和yyy-mm-dd+1T00:00:00。因此,如果我发送一个2011-11-04T07:00:00到2011-11-05T07:00:00的约会,不带时区元素,它认为我试图跨越两天。开始时间2011-11-04T07:00:00变为2011-11-04T00:00:00至2011-11-05T00:00:00。结束时间2011-11-05T07:00:00变为2011-11-05T00:00:00至2011-11-06T00:00:00。这将作为UTC在日历上抛出。在Outlook或webapp中查看时,它会在PST中显示为11月3日下午5点到11月6日下午5点,看起来像是跨越了3天(但实际上只有48小时)。

除了Pete的回答之外:
请注意Exchange存储的内容与Outlook告诉您的内容之间存在差异。我正在向Exchange 2010服务器日历编写“纯”SOAP XML调用,并通过Outlook 2003查看结果。创建调用明确指定UTC时间,并且没有其他时区信息。服务器具有UTC设置。
如果我现在创建这样的全天活动:

  <mes:CreateItem SendMeetingInvitations="SendToNone">
  <mes:Items>
     <typ:CalendarItem>
       <typ:Subject>Alldayevent</typ:Subject>
       <typ:Start>2013-01-08T01:00:00.000Z</typ:Start>
       <typ:End>2013-01-08T02:00:00.000Z</typ:End>
       <typ:IsAllDayEvent>true</typ:IsAllDayEvent>

全天活动
2013-01-08T01:00:00.000Z
2013-01-08T02:00:00.000Z
真的
。。。Exchange将其正确存储为(GetItem输出):

2013-01-08T00:00:00Z
2013-01-09T00:00:00Z
真的
如果Outlook也配置为UTC,则显示为8天的全天活动。1月(如预期)

但是,如果我将Outlook设置为UTC+1(阿姆斯特丹时间),则会显示超过两天的事件(请注意,复选框为空):

在这种情况下选中“全天”将导致(GetItem输出):

2013-01-07T23:00:00Z
2013-01-09T23:00:00Z
真的

遇到了类似的问题,我的全天活动是从前一天下午4点创建到全天活动指定日期下午4点(我目前在太平洋标准时间-8,因此在exchange服务器端似乎是UTC错误)

调用
Appointment.save
时,使用可选的第二个参数
sendInvitationMode.SendToNone
,例如:

a.save(新文件夹ID(WellKnownFolderName.Calendar),
SendInvitationMode.SendToNone);
如果您喜欢XML,请参阅信封/Body/CreateItem/@sendmeetinginvestments:


<t:Start>2013-01-08T00:00:00Z</t:Start>
<t:End>2013-01-09T00:00:00Z</t:End>
<t:IsAllDayEvent>true</t:IsAllDayEvent>
 <t:Start>2013-01-07T23:00:00Z</t:Start>
 <t:End>2013-01-09T23:00:00Z</t:End>
 <t:IsAllDayEvent>true</t:IsAllDayEvent>