使用Azure服务结构中的Http.sys进行端口共享

时间:2018-03-28 14:56:36

标签: azure-service-fabric

想要在使用端口80的Azure服务结构中托管2个asp .net核心2网站。在这个link中,他们提到端口共享但不确定如何配置它?有没有办法提到主机名?

2 个答案:

答案 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

Microsoft Document