⚠️
CSOM の Site.OpenWeb メソッドで File Not Found が発生する件について
CSOM で、以下のコードのように同じサイトを作成および削除する操作を繰り返すと、ServerException (File Not Found) が発生します。最初はタイミングの問題かと考えましたが、スリープを入れても常に発生するため、タイミングの問題ではないようです。
$context.Load($context.Site)
$context.ExecuteQuery()
for ($i = 0; $i -lt 2; $i++) {
# サイトの作成
$web = New-Object Microsoft.SharePoint.Client.WebCreationInformation
$web.Url = "{{site-name}}"
$context.Web.Webs.Add($web) | Out-Null
$context.ExecuteQuery()
# サイトの取得
$web = $context.Site.OpenWeb($context.Site.ServerRelativeUrl + "/{{site-name}}")
$context.Load($web)
$context.ExecuteQuery()
# サイトの削除
$web.DeleteObject()
$context.ExecuteQuery()
}
この現象について、OpenWeb の実装を ILSpy で確認しました。
キャッシュが利用されていることが分かります。
Discussion