2

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

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

4

2 回答 2

4

我们已经使用 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 浏览器仪表板的人都看不到凭据(并且不必担心加密清单中的秘密)。

于 2019-09-27T20:48:15.710 回答
-1

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

希望能帮助到你。

于 2019-09-18T11:28:54.867 回答