为什么 ICalUid 的长度不同?

Why differs the ICalUid in length?

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

这个 属性 也并不总是看起来一样,据我所知,它以某种方式发生了变化。我已经记录了一些变化。首先使用以下 .ICalUID 创建记录:

5fc22493-7212-4c44-9cd6-971c3bae28af

然后下次我在 Exchange 中查找相同项目的记录时 returns 另一个 .ICalUID:

040000008200E00074C5B7101A82E00800000000F01883C1D49AD101000000000000000010000000C321E8A40C6DE948836C422E2DA8610C

为什么一开始返回的是 36 个字符的字符串,后来返回的是 190 个字符的字符串?为什么这个值会改变?

编辑: 短 ID 是在使用 Android phone 连接到 Exchange Server 时创建的,而长 ID 是使用 Outlook on Windows 10 和 Outlook 2013 创建的。但它以某种方式发生了变化?

这是因为 iCal 的 RFC 没有定义 Uid https://www.rfc-editor.org/rfc/rfc5545 just that it has to be globally unique. That means its down to implementer eg some people use a guid, some use a guid and domain etc. Exchange/Outlook uses a GOID format in particular PidLidCleanGlobalObjectId https://msdn.microsoft.com/en-us/library/office/cc839502.aspx and PidLidGlobalObjectId https://msdn.microsoft.com/en-us/library/office/cc815676.aspx 的格式或长度(通常在创建约会时由 Exchange 服务器生成)。

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

干杯 格伦