⚠️

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