AzureService Fabric的文档提供了大量在Azure Service Fabric上部署和托管 ASP.Net Core的示例。找不到 IIS 承载的应用的部署。
如何将 ASP.Net 站点和 WCF 服务部署为 Azure Service Fabric 群集上的来宾可执行文件,就像将它们部署到 Azure 应用服务实例一样简单?
我们已经使用 Docker 成功地做到了这一点。例如,我们使用以下 docker 镜像作为基础:
mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
请注意,Microsoft不再在 docker 中心托管这些映像。
这是一个相当复杂的示例。如您所见,我们从预编译的 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:SitesOurSite' -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://amoghnatu.net/2017/07/03/creating-wcf-service-hosted-in-azure-service-fabric-over-https-with-basic-authentication/
https://github.com/loekd/ServiceFabric.WcfCalc
https://www.dotnetcurry.com/windows-azure/1342/create-wcf-service-azure-service-fabric
希望对您有所帮助。