上次修改时间: 2008年11月12日
适用范围: SharePoint Foundation 2010
本文内容
获取-发送-刷新
owshiddenversion 字段
vti_versionhistory 属性
ETag DAV 头
附件
除性能注意事项之外,冲突检测也是最重要的同步主题之一。
获取-发送-刷新
最好是由客户端来检测并解决冲突。客户端可以检测更改是否实际发生了冲突,它会引发通知以告知用户手动纠正冲突,并会在用户存储中存储本地用户所做更改的副本。
为此,最好是将同步操作过程分为三个部分:首先,从服务器获取可能发生更改的数据;然后,客户端确定客户端副本中已上载的更改是否存在任何冲突;最后,如果不存在冲突,则上载新的客户端数据。
SharePoint 对象可能会在更新应用一些业务逻辑。为此,UpdateListItems(String, XmlNode) 方法将返回已更新的项目的所有字段和属性的更新值。
owshiddenversion 字段
Windows SharePoint Services 3.0 使用 owshiddenversion 字段(在 Microsoft.SharePoint.SPBuiltInFieldId 类中)检测冲突。如果更新过程中未提供此字段值,服务器将覆盖所有更改。若要防止数据丢失,客户端必须在更新过程中始终提供此字段值。此字段值是服务器最新返回的数值。
利用 owshiddenversion 字段值,服务器可以确定您是否正在更新某个项目的过期副本。例如,客户端同步某个项目并为此属性获取值"2"。在更新过程的中期,某人在服务器上更改了该项目的标题,从而使该值变成"3"。当客户端发送有关对值"2"的更改且在客户端上一次请求该项目后已修改该项目,则服务器将返回一个 TP_E_VERSIONCONFLICT (0x81020015) 错误和该项目的当前内容的列表。
vti_versionhistory 属性
当所有客户端与中央服务器同步时,使用 owshiddenversion 字段足以进行简单的冲突检测。不过,对等同步会带来更多挑战。您需要避免在对等客户端同步更改后引发不必要的冲突。
此外,在非对等的情况下也会发生冲突。如果客户端将更改成功上载到服务器,但没有收到确认(来自 UpdateListItems(String, XmlNode) 的响应),则在下一次同步时,客户端必须确定其最新的更改已上载。
ETag DAV 头
使用 HTTP/DAV 协议(也称作 WebDAV 或 DAV)获取和更新文档及附件。此协议使用不同的机制进行冲突检测。当使用 get 取值函数获取文件(其中会包含列表中的文档、附件或列表外的页面)时,则将返回一个 ETag。此 ETag 包含另一个二进制大型对象 (BLOB),此对象包含一个 GUID 和一个版本号。当使用 put 取值函数上载文档时,客户端必须请求此 ETag 与提供的 ETag 匹配。
备注
此协议不支持版本历史记录。
附件
虽然可以使用 HTTP/DAV 协议更新附件,但若要添加附件,您必须使用 Lists Web 服务提供的 AddAttachment 方法。此方法接受二进制数组并返回附件的 URL。
有关详细信息,请参阅 AddAttachment(String, String, String, [])。