Используя пакет Sharepoint.Client
версии 16, мы пытаемся создать MigrationJob
в c #, а затем хотим просмотреть состояние и журналы этого задания миграции.Нам удалось подготовить контейнеры и очередь, используя методы ProvisionMigrationContainers
и ProvisionMigrationQueue
для объекта Site
.И нам удалось загрузить некоторые файлы и манифест XML.Эти XML-файлы все еще содержат некоторые ошибки в идентификаторах и структуре, поэтому мы ожидаем, что задание не будет выполнено.Тем не менее, мы все еще ожидаем, что задание будет создано и выведет некоторые сообщения и журналы.К сожалению, очередь сообщений кажется пустой, и журналы нигде не найдены (по крайней мере, мы не можем их найти).Guid созданного задания миграции - это пустой указатель: 00000000-0000-0000-0000-000000000000
Согласно https://docs.microsoft.com/en-us/sharepoint/dev/apis/migration-api-overview журналы должны быть сохранены в контейнере манифеста в виде большого двоичного объекта.Но как бы вы на самом деле нашли имя файла журнала?Проблема заключается в том, что все должно быть зашифровано, и не допускается перечисление больших двоичных объектов в хранилище больших двоичных объектов (попытка приводит к ошибке 403.)
Итак, главный вопрос: как мы должны получить доступфайлы журнала?И бонусный вопрос: если команда создания задания переноса верна, почему мы получаем нулевой указатель?И последнее: почему очередь пуста?Я могу предположить, что задание на миграцию никогда не создается, и поэтому guid - это все нули, но откуда нам знать, что мешает созданию задания?
Вот код, который создает задание на миграцию.:
public ClientResult<Guid> CreateMigrationJob()
{
var encryption = new EncryptionOption
{
AES256CBCKey = encryptionProvider.Key
};
return context.Site.CreateMigrationJobEncrypted(
context.Web.Id,
dataContainer.Uri.ToString(),
metadataContainer.Uri.ToString(),
migrationQueue.Uri.ToString(),
encryption
);
}
context
, dataContainer
, metadataContainer
были должным образом созданы как члены и успешно использовались в других методах.migrationQueue
и encryption
также выглядят хорошо, но не использовались в других местах.Ключ шифрования использовался для загрузки и выгрузки файлов, и там он прекрасно работает.
Для полноты, вот код, который мы попытались использовать, чтобы проверить, есть ли что-нибудь в очереди:
public void GetMigrationLog()
{
while (migrationQueue.ApproximateMessageCount > 0) //debug code, this should be done async
{
Console.WriteLine(migrationQueue.GetMessage().AsString);
}
}
Он ничего не выводит, потому что очередь пуста.Мы ожидаем, что будет по крайней мере сообщение об ошибке или сообщение о том, что журналы были созданы (включая имя файла журнала).
PS: мы понимаем, что должна быть возможность загружать журналы, используя DownloadToFileEncrypted(encryptionProvider, targetFile.ToString(), System.IO.FileMode.Create)
но только если вы уже знаете имя файла, которое не можете найти, так что это выглядит немного глупо.