在IIS外部托管.NET Core应用程序

时间:2018-11-12 13:41:52

标签: asp.net-core hosting kestrel

我正在尝试在.NET Core上托管Kestrel的{​​{1}}应用程序。我似乎收到以下错误消息:

IIS

MISC

System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.AspNetCore.Server.IISIntegration, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.'

程序

class Address {
        public string ProtocolType { get; set; } = "http";
        public string Host { get; set; }
        public long Port { get; set; }
        public static Address Default = new Address { Host = "localhost", Port = 9300, ProtocolType = "http" };
    }


    static class AddressExtensions {
        public static string ToUrl(this Address @this) {
            return $"{@this.ProtocolType}//{@this.Host}:{@this.Port}";
        }
    }

启动

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
            var builder=WebHost.CreateDefaultBuilder(args); //crashes here !!

            builder.UseStartup("Startup");
            var url = Address.Default.ToUrl();
            builder.UseKestrel().UseUrls(url);
            return builder;

        }

    }

为什么它尝试将其托管在public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvcCore(); } public void Configure(IApplicationBuilder app) { app.Map("/http", x => x.UseMvc()); app.Map("/ws", x => { }); app.UseMvc(); } } 上?我必须指定我没有IIS文件。它不是通过launchSettings.json模板创建的。要在.NET Core App之外运行,是否需要手动执行该操作?

如何使该服务器正常工作并在IIS之外运行?

1 个答案:

答案 0 :(得分:1)

首先,launchSettings.json仅用于开发。部署应用程序后,它不会发布也不会使用。

第二,CreateDefaultBuilder()除其他外,还添加了IIS集成服务。但是,这并不意味着您此时必须在IIS中托管。当然,您不应该因为包含IIS集成而收到错误消息,但您不是在IIS中托管。如果我不得不冒险猜测的话,我想您正在运行与服务器上安装的运行时不同的.NET Core SDK版本。确保两者彼此对齐。

如果您想完全摆脱IIS集成,则需要停止使用CreateDefaultBuilder并手动执行操作,当然要减去IIS集成。您可以view the source来查看该方法在做什么。

相关问题