Azure Service Fabric 的文档提供了在 Azure Service Fabric 上部署和托管 ASP.Net Core 的大量示例。到处都找不到 IIS 托管应用程序的部署。
如何将 ASP.Net 站点和 WCF 服务部署为 Azure Service Fabric 群集上的来宾可执行文件,就像将它们部署到 Azure App Service 实例一样简单?
Azure Service Fabric 的文档提供了在 Azure Service Fabric 上部署和托管 ASP.Net Core 的大量示例。到处都找不到 IIS 托管应用程序的部署。
如何将 ASP.Net 站点和 WCF 服务部署为 Azure Service Fabric 群集上的来宾可执行文件,就像将它们部署到 Azure App Service 实例一样简单?
我们已经使用 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 中),它为我们提供了所需清单的模板,我们将使用该模板部署所需数量的容器。在部署时,Service Fabric 会读取您的清单,提取并缓存 docker 映像并相应地创建容器。不用说,您的清单必须包含有关注册表和相关凭据的信息。
旁注:切勿在清单中使用图像的“最新”标记,因为如前所述,Service Fabric 会缓存图像。另外,请记住配置您的集群以清理旧图像。否则,根据您的应用程序,您可能会很快耗尽空间。
更新:在 Aure ACR 中存储 docker 图像,可以使用托管服务标识,避免将注册表的凭据存储在清单中。分配给集群的底层 VM 规模集的身份可以被授予访问 ACR 的权限,以在部署期间下载 docker 映像。这样可以确保任何有权访问 SF 浏览器仪表板的人都看不到凭据(并且不必担心加密清单中的秘密)。
AFAIK,恐怕对于 ASP.Net 网站,我们必须使用常规方法来扩大/扩大规模。
将 WCF 迁移到 ServiceFabric 伴随着扩展单体 WCF 住宿的困惑口头表达。为了扩展应用程序,只有水平扩展将通过增加 Web 服务器的数量来完成,并在其前面进行负载平衡。
为了克服这个问题,微服务架构方法是最好的选择。我们可以将单个 WCF 应用程序分解为多个托管为 WCF 应用程序的微服务。
一种方法是将此 WCF 作为无状态服务移动到服务结构(分布式系统平台),并通过在服务结构集群中生成各种服务实例来扩展服务。
如果您想做最小的更改以将您的应用程序移动到分布式环境,可以在服务结构中使用 WCF 通信无状态服务进行托管。
检查以下文档以获取更多参考:
https://github.com/loekd/ServiceFabric.WcfCalc
https://www.dotnetcurry.com/windows-azure/1342/create-wcf-service-azure-service-fabric
希望能帮助到你。