DocLib Item остается проверенным после редактирования
Вот шаги моей проблемы:
- Перейти к пользовательской DocumentLibrary (пользовательские поля, пользовательская ListForm с пользовательским FieldIterator)
- Выберите один из существующих в рабочей документации Word (*.doc)
- Нажмите "Редактировать документ" для редактирования в клиентском приложении Office
- Отредактируйте документ и нажмите Сохранить, посмотрите на индикатор загрузки изменений...
- Закройте документ, представление, которое я открыл раньше, будет обновлено.
Проблема:
- Товар становится проверенным администратором. Неважно, какого пользователя вы используете для редактирования, вы всегда будете видеть выписанный документ в разделе "Администратор".
- Изменения в документе применяются время от времени.
Результаты моего расследования:
Я проверил 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=""{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 дали мне:
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 повреждены в вашем документе.