[英]How To Get Sharepoint Online Migration API Logs (using c#)
使用Sharepoint.Client
版本 16 包,我們嘗試在 c# 中創建一個MigrationJob
,然后希望查看該遷移作業的狀態和日志。 我們設法使用Site
對象上的ProvisionMigrationContainers
和ProvisionMigrationQueue
方法來配置容器和隊列。 我們設法上傳了一些文件和清單 XML。 這些 XML 的 ID 和結構中仍然包含一些錯誤,因此我們預計作業會失敗。 但是,我們仍然希望創建作業並輸出一些消息和日志。 不幸的是,消息隊列似乎是空的,日志無處可尋(至少我們找不到它們)。 創建的遷移作業的 Guid 為空 guid: 00000000-0000-0000-0000-000000000000
根據https://docs.microsoft.com/en-us/sharepoint/dev/apis/migration-api-overview ,日志應作為 blob 保存在清單容器中。 但是,您實際上如何找到日志文件的名稱呢? 問題是一切都必須加密,並且不允許在 blob 存儲中列出 blob(嘗試這樣做會導致 403 錯誤)。
所以主要問題是:我們應該如何訪問日志文件? 還有一個額外的問題:假設創建遷移作業的命令是正確的,為什么我們會得到 null 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)
下載日志DownloadToFileEncrypted(encryptionProvider, targetFile.ToString(), System.IO.FileMode.Create)
是您已經知道找不到的文件名,所以看起來有點傻。
當您在代碼中調用 context.Site.CreateMigrationJobEncrypted 時,它會返回一個 Guid。 日志文件的名稱將是 Import-TheGuidThatWasReturned-ANumberThatStartsAt1ButIncrements.log
因此可能會調用第一個日志文件。
進口-AE9525D9-3CF7-4D1A-A9E0-8AB0DF4F09B2-1.log
使用加密不應阻止您閱讀隊列。 如果您以這種方式配置了您的隊列,或者您使用的是租用默認值而不是您自己的租用,則您將無法讀取該隊列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.