⚠️

CSOM の Site.OpenWeb メソッドで File Not Found が発生する件について

2022/01/01に公開

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