首页 文章

Service Fabric上的Asp.net Core 2.1

提问于
浏览
0

我正在将Service Fabric中托管的Asp.net Core 2.0应用程序迁移到Asp.net Core 2.1 . Service Fabric还没有Asp.net Core 2.1的模板,所以我按照官方教程here,但无法对"Program.cs"文件进行更改,特别是在非SF托管应用程序中:

namespace WebApp1
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateWebHostBuilder(args).Build().Run();
            }

            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();
        }
    }

而在Service Fabric中

namespace Web1
{
    internal sealed class Web1 : StatelessService
    {
        public Web1(StatelessServiceContext context)
            : base(context)
        { }

        protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
        {
            return new ServiceInstanceListener[]
            {
                new ServiceInstanceListener(serviceContext =>
                    new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
                    {
                        ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}");

                        return new WebHostBuilder()
                                    .UseKestrel()
                                    .ConfigureServices(
                                        services => services
                                            .AddSingleton<StatelessServiceContext>(serviceContext))
                                    .UseContentRoot(Directory.GetCurrentDirectory())
                                    .UseStartup<Startup>()
                                    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                                    .UseUrls(url)
                                    .Build();
                    }))
            };
        }
    }
}

如果不调用 WebHost.CreateDefaultBuilder(args) ,则主机文件环不能按指定的方式工作here

我如何使其工作?迁移到2.1 for Service Fabric是否为时尚早?

1 回答

  • 0

    您可以查看source code以查看需要添加的内容 . 也许是这样的:

    .ConfigureServices((hostingContext, services) =>
       {
          // Fallback
          services.PostConfigure<HostFilteringOptions>(options =>
          {
               if (options.AllowedHosts == null || options.AllowedHosts.Count == 0)
               {
                    // "AllowedHosts": "localhost;127.0.0.1;[::1]"
                    var hosts = hostingContext.Configuration["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    // Fall back to "*" to disable.
                    options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });
               }
          });
          // Change notification
          services.AddSingleton<IOptionsChangeTokenSource<HostFilteringOptions>>(
              new ConfigurationChangeTokenSource<HostFilteringOptions>(hostingContext.Configuration));
          services.AddTransient<IStartupFilter, HostFilteringStartupFilter>();
       })
    

相关问题