c# - 应如何将 IIS 托管的基于 ASP.Net 的系统部署到 Azure Service Fabric?

标签 c# asp.net azure azure-service-fabric guest-executable

Azure Service Fabric 的文档提供了在 Azure Service Fabric 上部署和托管 ASP.Net Core 的充足示例。找不到 IIS 托管应用程序的部署。

如何将 ASP.Net 站点和 WCF 服务部署为 Azure Service Fabric 群集上的 guest 可执行文件,就像将它们部署到 Azure 应用服务实例一样简单?

最佳答案

我们已经使用 Docker 成功完成了此操作。例如,我们使用以下 docker 镜像作为基础:

mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019

请注意,Microsoft 不再在 docker hub 上托管这些镜像。

这是一个相当复杂的示例。正如您所看到的,我们从预编译的 ASP.NET 应用程序构建镜像,安装一些 IIS 模块,甚至提取压缩模块扩展的安装程序。

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019

COPY OurSite c:/OurSite

# Enable IIS's Static Content, Static Content Compression and App Init modules
# Download & Install IIS compression extension (providing Brotli)
# Setting "staticCompressionIgnoreHitFrequency" attribute on "HttpCompression" tag in applicationHost.config (that's the only place we can set that attr)
# Remove Default Web Site
# Register a new site
# Set following properties on the Application Pool:
#   - "Start Mode" to "AlwaysRunning" to ensure w3wp process always starts
#   - "Idle Timeout" to 0 ensuring w3wp process doesn't get terminated due to inactivity.
# Recycle Application Pool
RUN Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationInit ; \
    Enable-WindowsOptionalFeature -Online -FeatureName IIS-StaticContent ; \
    Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpCompressionStatic ; \
    Invoke-WebRequest -Uri https://download.microsoft.com/download/6/1/C/61CC0718-ED0E-4351-BC54-46495EBF5CC3/iiscompression_amd64.msi \
        -OutFile c:\iiscompression_amd64.msi ; \
    Start-Process msiexec.exe -ArgumentList '-i', 'c:\iiscompression_amd64.msi', '/quiet', '/passive' -NoNewWindow -Wait ; \
    Remove-Item c:\iiscompression_amd64.msi -Force ; \
    $ConfigSection = Get-IISConfigSection -SectionPath "system.webServer/httpCompression" ; \
    Set-IISConfigAttributeValue -ConfigElement $ConfigSection -AttributeName "staticCompressionIgnoreHitFrequency" -AttributeValue True ; \
    Remove-WebSite -Name 'Default Web Site' ; \
    New-Website -Name 'OurSite' -Port 80 -PhysicalPath 'c:\OurSite' -ApplicationPool '.NET v4.5' ; \
    Import-Module WebAdministration ; \
    Set-ItemProperty -Path 'IIS:\AppPools\.NET v4.5' -Name 'startMode' -Value 'AlwaysRunning' ; \
    Set-ItemProperty -Path 'IIS:\Sites\OurSite' -Name 'applicationDefaults.preloadEnabled' -Value 'true' ; \
    Set-ItemProperty -Path 'IIS:\AppPools\.NET v4.5' -Name 'processModel.idleTimeout' -Value '00:00:00' ; \
    Restart-WebAppPool '.NET v4.5'

VOLUME c:\\data

EXPOSE 80

然后,我们将这些镜像托管在安全的容器注册表中,创建一个 Service Fabric 项目(在 Visual Studio 中),该项目为我们提供了所需 list 的模板,我们将使用该模板部署所需数量的容器。在部署时,Service Fabric 读取 list 、提取并缓存 docker 镜像并相应地创建容器。不用说,您的 list 必须包含有关注册表和关联凭据的信息。

旁注:切勿在 list 中使用图像的“最新”标签,因为如上所述,Service Fabric 会缓存图像。另外,请记住配置集群以清理旧镜像。否则,根据您的应用程序,您可能会很快耗尽空间。

更新:在 Aure ACR 中存储 docker 镜像,可以使用托管服务身份并避免在 list 中存储注册表的凭据。分配给集群底层虚拟机规模集的身份可以访问 ACR,以在部署期间下载 docker 镜像。这可确保任何有权访问 SF 资源管理器仪表板的人都不会看到凭据(并且不必担心对 list 中的 secret 进行加密)。

关于c# - 应如何将 IIS 托管的基于 ASP.Net 的系统部署到 Azure Service Fabric?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57979575/

相关文章:

c# - 我是否必须检查 ApplyResponseChallengeAsync 中的响应状态?

c# - 使用 NavigateToLocalStreamUri 的 WebView 实际上并没有导航

c# - 在 ASP.NET ListView 中显示 RSS 或 ATOM 内容

Azure Bicep 部署 - 找不到路径“C :\Users\<user>\AppData\Local\Temp\<guid>\<template>. json”

c# - 如何从本地调用另一个函数应用程序?

c# - 是否可以在执行代码之前加载服务器端 Blazor 页面 HTML?

c# - 在 Unity 中使用 Stockfish Chess AI

c# - 使用应用程序状态变量和应用程序级事件

c# - 缓存信息存储在 ASP.NET 中的什么位置?

azure - 使用 Azure Pipeline 在 APIM 中导入 API