Ошибка целостности развертывания Blazor Wasm PWA IIS

Я создал новый проект Blazor PWA WebAssembly (шаблон последней версии по умолчанию) и развернул его в IIS в Windows Server, чтобы попробовать PWA.

Установлен последний пакет хостинга .NET Core.

После его публикации я запустил сценарий в Microsoft Docs для переименования файлов dll:

dir .\_framework\_bin | rename-item -NewName { $_.name -replace ".dll\b",".bin" } ((Get-Content .\_framework\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content .\_framework\blazor.boot.json

И код переименования обслуживающего персонала тоже:

((Get-Content .\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content .\service-worker-assets.js

Затем я удалил сжатые файлы, как говорится в документации:

wwwroot\service-worker-assets.js.br
wwwroot\service-worker-assets.js.gz
wwwroot\_framework\blazor.boot.json.br
wwwroot\_framework\blazor.boot.json.gz

Но при загрузке приложения я все еще получаю сообщение об ошибке:

введите описание изображения здесь

Что мне здесь не хватает?

Я предполагаю, что это связано с хешами и переименованием, но я не могу найти никакого решения в проблемах Github Blazor.


person Andres    schedule 24.07.2020    source источник
comment
Вы повторно сжимали обновленный файл blazor.boot.json?   -  person samwu    schedule 29.07.2020
comment
@samwu Нет, как мне его повторно сжать?   -  person Andres    schedule 29.07.2020
comment
Вы можете повторно сжать их с помощью PowerShell или прямого кода .NET: docs.microsoft.com/en-us/dotnet/api/ docs.microsoft.com/en-us/dotnet/api/ Вероятно, в Интернете есть некоторые утилиты, которые вы также могли бы использовать. Однако файлы gzip и brotli не требуются и не используются автоматически при размещении в IIS. Вы можете включить их использование, обновив web.config: raw.githubusercontent.com/dotnet/AspNetCore.Docs/master/   -  person Swimburger    schedule 31.12.2020
comment
В последнее время у меня была такая же проблема, и что сработало для меня, так это просто переименовать язык .dll, который находится в зависимых папках ниже _bin. так что в основном в вашей первой команде вы должны добавить -r, тогда она работает. dir .\_framework\_bin -r | ...   -  person SimonS    schedule 23.02.2021


Ответы (1)


В результате внесения вами изменений в файл blazor.boot.json проверка целостности не выполняется. service-worker-assets.js содержит список файлов и их хэши целостности, которые рассчитываются во время публикации. Вы можете вручную пересчитать хэши с помощью Bash / PowerShell, поскольку вы используете IIS, я предоставлю сценарий PowerShell, который я использовал для аналогичной проблемы:

# make sure you're in the wwwroot folder of the published application
$JsFileContent = Get-Content -Path service-worker-assets.js -Raw
# remove JavaScript from contents so it can be interpreted as JSON
$Json = $JsFileContent.Replace("self.assetsManifest = ", "").Replace(";", "") | ConvertFrom-Json
# grab the assets JSON array
$Assets = $Json.assets
foreach ($Asset in $Assets) {
  $OldHash = $Asset.hash
  $Path = $Asset.url
  
  $Signature = Get-FileHash -Path $Path -Algorithm SHA256
  $SignatureBytes = [byte[]] -split ($Signature.Hash -replace '..', '0x$& ')
  $SignatureBase64 = [System.Convert]::ToBase64String($SignatureBytes)
  $NewHash = "sha256-$SignatureBase64"
  
  If ($OldHash -ne $NewHash) {
    Write-Host "Updating hash for $Path from $OldHash to $NewHash"
    # slashes are escaped in the js-file, but PowerShell unescapes them automatically,
    # we need to re-escape them
    $OldHash = $OldHash.Replace("/", "\/")
    $NewHash = $NewHash.Replace("/", "\/")
    $JsFileContent = $JsFileContent.Replace("""$OldHash""", """$NewHash""")
  }
}

Set-Content -Path service-worker-assets.js -Value $JsFileContent -NoNewline

Этот сценарий выполняет итерацию по всем файлам, перечисленным внутри service-worker-assets.js, вычисляет новый хэш для каждого файла и обновляет хеш в файле JavaScript, если он отличается. Вы должны выполнить сценарий с опубликованной папкой wwwroot в качестве текущего рабочего каталога.

Я описал это более подробно в своем блоге: Исправить Blazor WebAssembly PWA проверки целостности

person Swimburger    schedule 30.12.2020