想要在使用端口80的Azure服务结构中托管2个asp .net核心2网站。在这个link中,他们提到端口共享但不确定如何配置它?有没有办法提到主机名?
答案 0 :(得分:1)
使用此类:
public class HttpSysInstanceListener
{
public static ServiceInstanceListener[] CreateListener(Type startupType, string endpointName, string rootPath, int port)
{
return new ServiceInstanceListener[]
{
new ServiceInstanceListener(serviceContext =>
new HttpSysCommunicationListener(serviceContext, $"{endpointName}", (url, listener) =>
{
return new WebHostBuilder()
.UseHttpSys(options =>
{
options.UrlPrefixes.Add($"http://+:{port}/{rootPath}/");
options.Authentication.Schemes = Microsoft.AspNetCore.Server.HttpSys.AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
})
.ConfigureServices(services => services
.AddSingleton<StatelessServiceContext>(serviceContext)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup(startupType)
.UseUrls(url)
.UseApplicationInsights()
.Build();
}))
};
}
}
答案 1 :(得分:1)
如果这是.NET CORE无状态WEB服务API,请使用HttpSys。但是,HttpsSys只能与IIS一起使用,而不能与KESTREL一起使用。
要在无状态服务中使用HttpSys,请重写CreateServiceInstanceListeners方法并返回HttpSysCommunicationListener实例: C#
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new ServiceInstanceListener[]
{
new ServiceInstanceListener(serviceContext =>
new HttpSysCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
new WebHostBuilder()
.UseHttpSys()
.ConfigureServices(
services => services
.AddSingleton<StatelessServiceContext>(serviceContext))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseStartup<Startup>()
.UseUrls(url)
.Build()))
};
}
还将url更改为不同于默认值的内容:
.UseUrls(url+="WebService")
因此,对于端口80上的本地主机,URL为:
http(s)// localhost.com/Web服务 / api / foo