You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为.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参数:

  1. 用sc命令安装服务(注意binPath=后面必须加空格,路径有空格的话要套双引号):
sc create MyProjService binPath= "C:\你的发布路径\MyProj.exe --urls=http://localhost:44322"
  1. 启动服务:
sc start MyProjService

后续要改端口的话,只需要卸载重装服务或者修改服务的binPath参数就行,不用重新编译代码。

方法3:用生产环境配置文件(符合.NET Core配置规范)

如果想更规范地管理配置,可以用appsettings.Production.json

  1. 在发布后的应用目录里创建或修改appsettings.Production.json,添加Urls配置:
{
  "Urls": "http://localhost:44322"
}
  1. 不用修改代码——.NET Core 2.1默认会自动加载这个生产环境配置文件,服务运行时会读取这里的端口设置。

最后补充个小细节:你之前注释掉app.UseHttpsRedirection();是正确的,因为你创建项目时取消了HTTPS配置,服务也没有加载SSL证书,所以不需要强制跳转HTTPS。

内容的提问来源于stack exchange,提问作者kofifus

火山引擎 最新活动