我正在尝试使用Hostable Web Core在Service Fabric中运行IIS。
我认为问题在于Service Fabric正在为http://+:12345
和http://localhost:12345
设置网址,但IIS确实需要http://*:12345
的URLACL。用星号。弱通配符。
所以我正在寻找一个不仅仅是我自己的设置入口点的解决方案。虽然,那就是我要去的地方。
使IIS注册强绑定的方法,或使Service Fabric分配弱URLACL的方法。
想法?
答案 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
元素的最后一个子元素,添加ApplicationManifest
和Principals
元素:
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中指定容器。