以下是我的问题的步骤:
- 进入自定义文档库(自定义字段,自定义ListForm和自定义FieldIterator)
- 选择一个现有的生产Word文档(*.doc)
- 点击"编辑文档"以便在客户端Office应用程序中编辑
- 编辑文件并点击保存,查看更改上传的进度条…
- 关闭文档,我之前打开的视图会刷新。
问题:
- 项目被管理员签出。不管你用什么用户来编辑,你总是会在Administrator下看到签出的文档。
- 对文档的更改按时间应用。
调查结果:
我已经通过提琴手,发现这个CellRequestFail错误从CellStorage.svc:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ResponseVersion Version="2" MinorVersion="0" xmlns="http://schemas.microsoft.com/sharepoint/soap/"/>
<ResponseCollection WebUrl="http://kbstg.rt.ru" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Response Url="http://siteurl/Lists/DocumentationListInstance/02_D-link_DSL2640_UEBRUC2E_V2.doc" RequestToken="1" HealthScore="1">
<SubResponse SubRequestToken="1" ErrorCode="Success" HResult="0">
<SubResponseData/>
</SubResponse>
<SubResponse SubRequestToken="2" ErrorCode="CellRequestFail" HResult="2147500037">
<SubResponseData Etag=""{BB1B8453-5F6F-4D05-8210-E42DB21A6711},12"" CoalesceHResult="0" ContainsHotboxData="False" HaveOnlyDemotionChanges="False">DAALAJ3PKfM5lAabFgMCAAAOAgYAAwUBbgIgAL+u/no9AyhInDE5d6/lgklaAggAZgIAADcBBwGLAQ==</SubResponseData>
</SubResponse>
</Response>
</ResponseCollection>
</s:Body>
</s:Envelope>
ULS Logs给了我:
ttidLogCellStg Sub-request rtQueryChanges failed with error ICsiError: csierrBlobHeap_ClockReversed (0x266)
如果我上传任何新的文档,那么一切都会很好。即使我下载了一个有问题的文档,然后通过创建新项目上传它,那么一切都会好起来的。
更新:
我对一个文件做了一些测试,所以我可以说文件属性中的ETag等于SubRequest中的ETag。
这是MS-FSSHTTPS协议的问题。该协议负责Office客户端(Word)和服务器(SharePoint)之间的Office文档文件同步。它应该减少客户机和服务器之间传输的数据量。DOCX文档得到更好的结果,但它也适用于DOC文件。根据协议文档:
Etag:指定要更新的唯一字符串值的字符串每次更改文件内容时。唯一字符串得到更新,无论哪个协议客户端更新文件可共同创作文件中的内容。任何时候协议客户端指定单元格子请求中的Etag属性,服务器必须检查客户端发送的Etag是否匹配Etag为服务器上的文件指定的。如果有不匹配的Etag文件中存储的版本与客户端指定的版本之间存在差异协议服务器必须发送一个错误码值设置为cell子响应消息中的"CellRequestFail"。该协议服务器按照[RFC2616]中指定的方式处理该值。
您的文档中ETAG元数据信息似乎被破坏了