为什么ICalUid的长度不同?

时间:2016-04-20 08:08:27

标签: c# exchangewebservices icalendar exchange-server-2013

我有一个应用程序,它使用EWS API跟踪Exchange中的约会。使用属性.ItemId是不好的,因为虽然它是唯一的,但它可能会改变(Exchange web services: why is ItemId not constant? [continued])。对于跟踪项目,这是一个糟糕的情况。因此我使用属性Appointment.ICalUid。

这个属性看起来并不总是一样,到目前为止我可以看到,它以某种方式改变了。我记录了一些变化。首先使用以下.ICalUID:

创建记录
5fc22493-7212-4c44-9cd6-971c3bae28af

然后,当我在Exchange中查找记录时,相同的项目将返回另一个.ICalUID:

040000008200E00074C5B7101A82E00800000000F01883C1D49AD101000000000000000010000000C321E8A40C6DE948836C422E2DA8610C

为什么我首先要返回一个包含36个字符的字符串,然后再添加一个长度为190个字符的字符串?为什么这个值会改变?

编辑: 使用连接到Exchange Server的Android手机时会创建短ID,而使用Outlook 10在Windows 10上使用Outlook创建长ID。但它会以某种方式更改?

1 个答案:

答案 0 :(得分:1)

这是因为iCal的RFC没有定义Uid https://tools.ietf.org/html/rfc5545的格式或长度,只是它必须是全局唯一的。这意味着它的实现者,例如有些人使用guid,有些人使用guid和域等.Exchange / Outlook使用GOID格式,特别是PidLidCleanGlobalObjectId https://msdn.microsoft.com/en-us/library/office/cc839502.aspx和PidLidGlobalObjectId https://msdn.microsoft.com/en-us/library/office/cc815676.aspx(通常由创建约会时的Exchange服务器。)

所以你应该期待不同的格式,我通常建议你使用PidLidCleanGlobalObjectId扩展属性而不是icaluid属性,因为这将始终返回一致,因为它的设置Exchange将永远不会更改此属性,其中强类型属性可能在某些情况下不一致像你看到的情况。 (作为一般规则,它应该返回GOID)。

干杯 格伦