IIS + Service Fabric + URLACL

时间:2018-01-09 06:06:05

标签: iis azure-service-fabric

我正在尝试使用Hostable Web Core在Service Fabric中运行IIS。

我认为问题在于Service Fabric正在为http://+:12345http://localhost:12345设置网址,但IIS确实需要http://*:12345的URLACL。用星号。弱通配符。

所以我正在寻找一个不仅仅是我自己的设置入口点的解决方案。虽然,那就是我要去的地方。

使IIS注册强绑定的方法,或使Service Fabric分配弱URLACL的方法。

想法?

2 个答案:

答案 0 :(得分:-1)

如果您只想在服务结构群集上安装完整的IIS(或其他任何内容),可以通过在CodePackage文件的ServiceManifest.xml元素中指定安装脚本来自动完成

请参阅以下示例:

<CodePackage Name="Code" Version="1.0.0">
  <SetupEntryPoint>
    <ExeHost>
      <Program>Scripts\install.bat</Program>
    </ExeHost>
  </SetupEntryPoint>
  <EntryPoint>
    <ExeHost>
      <Program>MyService.exe</Program>
      <WorkingFolder>CodePackage</WorkingFolder>
    </ExeHost>
  </EntryPoint>
</CodePackage>

然后在项目的根目录中创建一个名为Scripts的文件夹(即我们在上例中命名的文件夹)并在其中创建两个文本文件:install.bat和{{1将复制到输出目录设置为install-iis.ps1 *,将其构建操作更改为Content

(*:专业提示:不要选择Copy if newer,因为每次构建解决方案时,Visual Studio都会重建项目,即使没有更改!)

对于Copy Always,内容应为:

install.bat

对于@echo off cd /d "%~dp0" powershell.exe -ExecutionPolicy Bypass -File ".\install-iis.ps1" -force > install-iis.log ,内容应为:

install-iis.ps1

而且,现在是有趣的部分 - 您必须将代码包设置为以管理员身份运行! (否则,你不能做一些有趣的事情,比如安装IIS!) - 这花了我一段时间才弄清楚,但是,你需要去Service Fabric项目(解决方案中的.sfproj文件),并找到Set-ExecutionPolicy Bypass -Scope Process # Exit early if IIS is already installed. $installed = (Get-WindowsOptionalFeature -Online ` | where { $_.state -eq "Enabled" -and $_.FeatureName -eq "IIS-WebServer" } ` | Measure-Object).Count; if ($installed -gt 0) { return; } # Install IIS and all relevant features. Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerRole -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServer -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-CommonHttpFeatures -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpErrors -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpRedirect -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationDevelopment -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-NetFxExtensibility45 -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-HealthAndDiagnostics -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpLogging -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-LoggingLibraries -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-RequestMonitor -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpTracing -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-Security -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-RequestFiltering -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-Performance -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebServerManagementTools -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-IIS6ManagementCompatibility -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-Metabase -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ManagementConsole -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-BasicAuthentication -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-WindowsAuthentication -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-StaticContent -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-DefaultDocument -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-WebSockets -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationInit -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ASPNET45 -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIExtensions -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-ISAPIFilter -All Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpCompressionStatic -All 文件。

在文件的最后,作为ApplicationManifest.xml元素的最后一个子元素,添加ApplicationManifestPrincipals元素:

Policies

现在为您的服务找到相应的<Principals> <Users> <User Name="SfAdminUser" AccountName="SfAdminUser"> <MemberOf> <SystemGroup Name="Administrators" /> </MemberOf> </User> </Users> </Principals> <Policies> <DefaultRunAsPolicy UserRef="SfAdminUser" /> </Policies> 元素,并添加ServiceManifestImport元素作为最后一个子元素:

Policies

你去吧。现在,当您安装服务时,它将确保计算机上存在IIS。

(您可以执行其他设置操作,例如在其他<ServiceManifestImport> <ServiceManifestRef ServiceManifestName="MyService.Pkg" ServiceManifestVersion="1.0.0" /> <ConfigOverrides> [ . . . redacted . . . ] </ConfigOverrides> <Policies> <RunAsPolicy CodePackageRef="Code" UserRef="SfAdminUser" EntryPointType="All" /> </Policies> </ServiceManifestImport> 文件中在IIS中设置站点,并在bat文件中为每个文件添加行 - 确保将其他文件设置为{{ 1}}和.ps1!)

答案 1 :(得分:-2)

我不打扰Hostable Web Core,它已经完全过时了。在Service Fabric上运行IIS的方法是在Windows容器中运行IIS并让Service Fabric管理容器。这是一个指导您完成它的教程:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-host-app-in-a-container

虽然该教程使用Docker Compose,但它不是必需的;如果您不想处理Docker Compose,可以在ServiceManifest.xml中指定容器。