EWS。 UpdateItem。为什么ChangeKey不更改?

时间:2019-01-08 11:18:16

标签: office365 exchange-server exchangewebservices

在EWS中,ItemId标签具有ChangeKey属性。这就是Exchange文档关于此属性的说明:

  

在Exchange中使用项目时,要记住的另一个值是ChangeKey属性。除商品ID外,此值还用于跟踪商品的状态。每当更改项目时,都会生成一个新的更改密钥。

因此,在我的应用中,我正在执行UpdateItem操作。这是我发送到服务器的XML:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
  <t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
  <m:UpdateItem xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" MessageDisposition="SaveOnly" ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToNone">
     <m:ItemChanges>
        <t:ItemChange>
           <t:ItemId Id="AAMkADE3MTJkZWNlLTZiYWYtNDY4Yi1hNmM3LWU2MzY2ZDZjYWNhMQBGAAAAAACoXti5FFu8TJNLLS5k9vC8BwAcJDq8WkSCQ77jdOtyazgnAAAAAAEMAAAcJDq8WkSCQ77jdOtyazgnAACOg4SZAAA=" ChangeKey="`CQAAAA==`" />
           <t:Updates>
              <t:SetItemField>
                 <t:FieldURI FieldURI="message:IsRead" />
                 <t:Message>
                    <t:IsRead>false</t:IsRead>
                 </t:Message>
              </t:SetItemField>
           </t:Updates>
        </t:ItemChange>
     </m:ItemChanges>
  </m:UpdateItem>
 </soap:Body>
</soap:Envelope>

请注意,ChangeKeyCQAAAA==。这是我收到的回复:

<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
 <s:Header>
  <h:ServerVersionInfo xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="15" MinorVersion="0" MajorBuildNumber="1365" MinorBuildNumber="1" Version="V2_23" />
</s:Header>
<s:Body xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <m:UpdateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
     <m:ResponseMessages>
        <m:UpdateItemResponseMessage ResponseClass="Success">
           <m:ResponseCode>NoError</m:ResponseCode>
           <m:Items>
              <t:Message>
                 <t:ItemId Id="AAMkADE3MTJkZWNlLTZiYWYtNDY4Yi1hNmM3LWU2MzY2ZDZjYWNhMQBGAAAAAACoXti5FFu8TJNLLS5k9vC8BwAcJDq8WkSCQ77jdOtyazgnAAAAAAEMAAAcJDq8WkSCQ77jdOtyazgnAACOg4SZAAA=" ChangeKey="CQAAAA==" />
              </t:Message>
           </m:Items>
           <m:ConflictResults>
              <t:Count>0</t:Count>
           </m:ConflictResults>
        </m:UpdateItemResponseMessage>
      </m:ResponseMessages>
    </m:UpdateItemResponse>
 </s:Body>
</s:Envelope>

您会看到返回的更改密钥仍然是CQAAAA==。为什么没有更改?

1 个答案:

答案 0 :(得分:2)

从技术上讲,已读/未读状态不是消息本身的一部分;它是分开存储的。这就是在PF存储中实现每用户消息状态的方式。文件夹。

如果您修改任何其他属性,则更改键将更改。