因此刚刚创建了一个新的ASP.Net Core WebSite,我可以看到program.cs文件包含一个针对.Net Core的特定ICommunicationListner实现。我将在该侦听器上修改以下方法,以允许您指定应用程序根目录,类似于默认Owin通信侦听器为WebAPI所做的操作。这将允许您将多个站点绑定到单个端口。
Task ICommunicationListener.OpenAsync(CancellationToken cancellationToken)
{
var endpoint = FabricRuntime.GetActivationContext().GetEndpoint(_endpointName);
string serverUrl = $"{endpoint.Protocol}://{FabricRuntime.GetNodeContext().IPAddressOrFQDN}:{endpoint.Port}";
_webHost = new WebHostBuilder().UseWebListener()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup()
.UseUrls(serverUrl)
.Build();
_webHost.Start();
return Task.FromResult(serverUrl);
}
的变化可能是这样的:
string serverUrl = $"{endpoint.Protocol}://+{endpoint.Port}/{this.appRoot}";
然后,服务清单文件内调整端点配置对HTTPS运行,443
<Endpoints>
<Endpoint Protocol="https" Name="ServiceEndpoint" Type="Input" Port="443" />
</Endpoints>
然后在服务织物应用程序清单添加到证书中(应该已经部署到VMS),使用指纹识别使用哪个证书,如此。
然后仍然在应用程序清单中的策略添加到证书到端点绑定为您服务
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<EndpointBindingPolicy EndpointRef="ServiceEndpoint" CertificateRef="Cert1" />
</Policies>
</ServiceManifestImport>
编辑:在服务URL 固定错字(为approot是错误的位置)并用weblistener替换默认的红隼扩展。
编辑2: 更新服务URL中使用通配符由于Web侦听
对不起,但这不符合我的要求。我想拥有多个网站,每个网站绑定到不同的域,而不是不同的路径。另外每个站点都需要单独的SSL证书。 Kestrel也不适合面向互联网的网站,所以我不能使用它。 –
另外我不认为这实际上甚至可以工作,因为红隼不支持端口共享。一个人不应该能够将多个kestrel服务器绑定到单个端口。 –
您的更新回答不应该削减它。见http://stackoverflow.com/questions/38700563/host-multiple-public-sites-on-service-fabric主要问题是同一端口上的多个SSL证书,我不认为它与服务有关布。 –