4

我正在尝试使用 Exchange Web 服务来更新日历项目。我正在创建一个 ItemChangeType,然后是一个 ItemIdType。我有一个唯一的 ID 可用于 ItemIdType.Id,但我没有任何东西可用于 ChangeKey。当我忽略它时,我得到一个 ErrorChangeKeyRequiredForWriteOperations。但是当我尝试在其中放一些东西时,我得到了一个 ErrorInvalidChangeKey。

我可以用什么来让它工作?

我还试图确定用于 ItemChangeType.Item 的 BaseItemIdType 的最佳实现是什么。到目前为止,我使用的是 ItemIdType,我猜这是正确的,但我还没有找到任何特别有用的文档。

4

4 回答 4

8

对 Hauge 的回答更明确一点:ChangeKey 存储在 Exchange 中并标识项目的当前状态。对该项目的任何更改都会创建一个新的 ChangeKey。

这使 Exchange 能够“知道”您的更新正在应用于与您查看项目时相同的项目状态 - 自您检查以来它没有更改。

一些代码可在: http://msdn.microsoft.com/en-us/library/aa563020.aspx

于 2009-01-21T19:51:49.760 回答
2

如果您有 ItemIdType.Id 属性,您还应该可以访问 Changekey,它也是 ItemIdType 的属性:

ItemIdType.ChangeKey

与Id 属性一样,它是一个字符串,因此您可以在抓取Id 时抓取它。

问候杰斯珀豪格

于 2008-11-14T10:11:02.163 回答
1

If you know ID only, you can get ChangeKey easily, for example for folder:

  private FolderIdType GetFullFolderID(string folderID)
  {
     GetFolderType request = new GetFolderType();
     request.FolderIds = new BaseFolderIdType[1];

     FolderIdType id = new FolderIdType();
     id.Id = folderID;
     request.FolderIds[0] = id;

     request.FolderShape = new FolderResponseShapeType();
     request.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly;

     GetFolderResponseType response = _binding.GetFolder(request);

     FailOnError(response);

     FolderInfoResponseMessageType firmt = (FolderInfoResponseMessageType)response.ResponseMessages.Items[0];
     FolderType ft = (FolderType)firmt.Folders[0];
     id.ChangeKey = ft.FolderId.ChangeKey;

     return id;
  }
于 2009-08-17T08:34:46.850 回答
1

我建议您使用 Exchange 托管 API 而不是 Exchange Web 服务来使用 Exchange。它更容易使用。您可以在下面找到更多详细信息:

https://msdn.microsoft.com/en-gb/library/dd877012(v=exchg.150).aspx

于 2010-11-12T10:36:19.110 回答