0

这是我的问题的步骤:

  1. 转到自定义 DocumentLibrary(自定义字段、自定义 ListForm 和自定义 FieldIterator)
  2. 选择现有的生产 Word 文档之一 (*.doc)
  3. 单击“编辑文档”以在客户端 Office 应用程序中进行编辑
  4. 编辑文档并单击保存,查看更改上传进度条...
  5. 关闭文档,我之前打开的视图将被刷新。

问题:

  1. 项目由管理员签出。无论您使用哪个用户进行编辑,您都将始终在管理员下看到已签出的文档。
  2. 对文档的更改会一次又一次地应用。

我的调查结果:

我通过 Fiddler 查找并从 CellStorage.svc 中发现了这个 CellRequestFail 错误:

<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="&quot;{BB1B8453-5F6F-4D05-8210-E42DB21A6711},12&quot;" CoalesceHResult="0" ContainsHotboxData="False" HaveOnlyDemotionChanges="False">DAALAJ3PKfM5lAabFgMCAAAOAgYAAwUBbgIgAL+u/no9AyhInDE5d6/lgklaAggAZgIAADcBBwGLAQ==</SubResponseData>
                </SubResponse>
            </Response>
        </ResponseCollection>
    </s:Body>
</s:Envelope>

ULS 日志给了我:

ttidLogCellStg      Sub-request rtQueryChanges failed with error ICsiError: csierrBlobHeap_ClockReversed (0x266)

如果我在那里上传任何新文件,那么一切都会好起来的。即使我下载了一个有问题的文档并在创建新项目后上传了它,那么一切都会再次好起来的。

更新:
我对文件进行了一些测试,所以我可以说文件属性中的 ETag 等于 SubRequest 中的 ETag。

4

1 回答 1

0

这是 MS-FSSHTTPS 协议中的问题。该协议负责 Office 客户端 (Word) 和服务器 (SharePoint) 之间的 Office 文档文件同步。它应该减少客户端和服务器之间传输的数据量。DOCX 文档可以获得更好的结果,但它也适用于 DOC 文件。根据协议文档

Etag:一个字符串,它指定一个唯一的字符串值,每次更改文件内容时都会更新该值。无论哪个协议客户端更新了可共同创作文件中的文件内容,都会更新唯一字符串。每当协议客户端在单元子请求中指定 Etag 属性时,服务器必须检查以确保客户端发送的 Etag 与服务器上为该文件指定的 Etag 匹配。如果客户端指定的版本与服务器存储的版本不匹配,协议服务器必须在信元子响应消息中发送错误代码值设置为“CellRequestFail”。协议服务器按照 [RFC2616] 中的规定处理这个值。

您的文档中的 ETAG 元数据信息似乎已损坏。

于 2014-07-16T20:36:45.627 回答