DocLib Item остается проверенным после редактирования

Вот шаги моей проблемы:

  1. Перейти к пользовательской DocumentLibrary (пользовательские поля, пользовательская ListForm с пользовательским FieldIterator)
  2. Выберите один из существующих в рабочей документации Word (*.doc)
  3. Нажмите "Редактировать документ" для редактирования в клиентском приложении Office
  4. Отредактируйте документ и нажмите Сохранить, посмотрите на индикатор загрузки изменений...
  5. Закройте документ, представление, которое я открыл раньше, будет обновлено.

Проблема:

  1. Товар становится проверенным администратором. Неважно, какого пользователя вы используете для редактирования, вы всегда будете видеть выписанный документ в разделе "Администратор".
  2. Изменения в документе применяются время от времени.

Результаты моего расследования:

Я проверил Fiddler и обнаружил эту ошибку 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="&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 в свойствах файла равен ETag, который указан в SubRequest.

1 ответ

Это проблема в протоколе MS-FSSHTTPS. Протокол отвечает за синхронизацию файлов документов Office между клиентом Office (Word) и сервером (SharePoint). Это должно уменьшить объем данных, передаваемых между клиентом и сервером. Лучшие результаты получаются для документов DOCX, но это работает и с файлами DOC. Согласно протоколу документации:

Etag: строка, указывающая уникальное значение строки, которое обновляется каждый раз при изменении содержимого файла. Уникальная строка обновляется независимо от того, какой клиент протокола обновил содержимое файла в совместном файле. Каждый раз, когда клиент протокола указывает атрибут Etag в подзапросе ячейки, сервер ДОЛЖЕН проверять, чтобы Etag, отправленный клиентом, соответствовал Etag, указанному для этого файла на сервере. Если есть несоответствие Etag между версией, указанной клиентом, и версией, сохраненной сервером, сервер протокола ДОЛЖЕН отправить значение кода ошибки, установленное в "CellRequestFail", в сообщении подответа ячейки. Сервер протокола обрабатывает это значение, как указано в [RFC2616].

Похоже, что метаданные ETAG повреждены в вашем документе.

Другие вопросы по тегам