使用Sharepoint.Client版本16包,我们尝试在c#中创建一个MigrationJob,然后想要查看该迁移作业的状态和日志。我们设法在Site对象上使用ProvisionMigrationContainers和ProvisionMigrationQueue方法来提供容器和队列。我们设法上传了一些文件和XML清单。这些XML在ids和结构中仍然包含一些错误,因此我们预计作业会失败。但是,我们仍然期望创建作业并输出一些消息和日志。不幸的是,消息队列似乎是空的,日志也无处可寻(至少我们找不到它们)。创建的迁移作业的Guid为空guid:00000000-0000-0000-0000-000000000000
根据https://docs.microsoft.com/en-us/sharepoint/dev/apis/migration-api-overview的说法,日志应该作为blob保存在清单容器中。但是,实际上如何找到日志文件的名称呢?问题是,所有内容都必须加密,并且不允许列出blob存储中的blob(尝试这样做会导致403错误)。
所以主要的问题是:我们应该如何访问日志文件?还有一个额外的问题:假设创建迁移作业的命令是正确的,为什么我们会得到空的guid?最后一个问题:为什么队列是空的?我可以推测永远不会创建迁移作业,这就是为什么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)下载日志,但前提是您已经知道文件名,而您找不到文件名,所以这看起来有点愚蠢。
发布于 2018-10-23 21:46:29
当您在代码中调用context.Site.CreateMigrationJobEncrypted时,它将返回一个Guid。日志文件的名称将为Import-TheGuidThatWasReturned-ANumberThatStartsAt1ButIncremennts.log
所以第一个日志文件可能会被调用。
Import-AE9525D9-3CF7-4D1A-A9E0-8AB0DF4F09B2-1.log
使用加密不应阻止您读取队列。只有以这种方式配置队列,或者您使用的是租户默认值而不是您自己的租户时,您才无法读取队列。
https://stackoverflow.com/questions/52818179
复制相似问题