Как получить логи API Sharepoint Online Migration (используя c #) - PullRequest
0 голосов
/ 15 октября 2018

Используя пакет 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) но только если вы уже знаете имя файла, которое не можете найти, так что это выглядит немного глупо.

1 Ответ

0 голосов
/ 23 октября 2018

Когда вы вызываете context.Site.CreateMigrationJobEncrypted в вашем коде, он возвращает Guid.Имя файла журнала будет Import-TheGuidThatWasReturned-ANumberThatStartsAt1ButIncremennts.log

Таким образом, может быть вызван первый файл журнала.

Import-AE9525D9-3CF7-4D1A-A9E0-8AB0DF4B0

Использование шифрования не должно мешать вам читать очередь.Вы не сможете прочитать очередь только в том случае, если вы настроили свою очередь таким образом или используете арендный договор по умолчанию, а не свой собственный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...