如何为.NET Core 2.1+Identity UI+Windows服务设置端口?
解决Windows服务模式下ASP.NET Core应用监听指定端口的问题
嗨,我来帮你搞定这个端口不生效的问题!核心原因很简单:launchSettings.json只在开发环境(比如用Visual Studio调试、dotnet run启动)时才会被读取,当你把应用发布成Windows服务运行时,这个配置文件完全不会被加载,所以里面的端口设置自然没起作用。
下面给你几种实用的解决办法,按需选择:
方法1:在代码中指定端口(简单直接)
修改Program.cs里的CreateWebHostBuilder方法,用UseUrls明确指定要监听的端口:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseUrls("http://localhost:44322") // 这里替换成你需要的端口 .UseStartup<Startup>();
这样不管是调试还是作为服务运行,应用都会监听这个端口。如果需要区分开发和生产环境的端口,可以结合环境变量判断:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) { var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"; return WebHost.CreateDefaultBuilder(args) .UseEnvironment(env) .UseUrls(env == "Development" ? "https://localhost:44322;http://localhost:44322" : "http://localhost:44322") .UseStartup<Startup>(); }
方法2:通过命令行参数传递端口(灵活易修改)
如果你不想改代码,也可以在安装服务时给可执行文件传递--urls参数:
- 用sc命令安装服务(注意
binPath=后面必须加空格,路径有空格的话要套双引号):
sc create MyProjService binPath= "C:\你的发布路径\MyProj.exe --urls=http://localhost:44322"
- 启动服务:
sc start MyProjService
后续要改端口的话,只需要卸载重装服务或者修改服务的binPath参数就行,不用重新编译代码。
方法3:用生产环境配置文件(符合.NET Core配置规范)
如果想更规范地管理配置,可以用appsettings.Production.json:
- 在发布后的应用目录里创建或修改
appsettings.Production.json,添加Urls配置:
{ "Urls": "http://localhost:44322" }
- 不用修改代码——.NET Core 2.1默认会自动加载这个生产环境配置文件,服务运行时会读取这里的端口设置。
最后补充个小细节:你之前注释掉app.UseHttpsRedirection();是正确的,因为你创建项目时取消了HTTPS配置,服务也没有加载SSL证书,所以不需要强制跳转HTTPS。
内容的提问来源于stack exchange,提问作者kofifus




