前两天转载一篇.net core 启动分析,由于发布时候一直纠结在默认5000端口上,所以好好研究了一下。

1.IIS集成

如果通过IIS当宿主的话,那这些都不是事情,强大的IIS可以帮助我们对站点的域名、端口等等等等的配置。至于如何在IIS上部署asp.net core的web应用,就不是这里的重点。大致简单的描述一下:

需要下载Net Core SDK 与 Server Hosting,下载地址https://www.microsoft.com/net/download

安装完查看.net core sdk是否安装成功命令行dotnet info

server host 是否安装成功iis模块与处理程序映射中查看如下

然后建立站点,指定到发布站点的文件

最后就是应该程序池配置,选择无托管,这样有server host转发请求。

2.Linux环境

具体安装就不说了,也是一大堆。根据官网指示,也就是安装.net core运行环境就可以运行了。

这里推荐一篇博文,大家自行参考 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

回到重点,如何配置url及端口参数

1.在Program的Main方法里面指定

public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseUrls("http://localhost:5001")
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build(); host.Run();
}

这种方法不灵活,即使通过增加配置文件去读,也不是那么优雅。这个时候,本人就觉得微软肯定不会推荐这么用的,于是继续找。

2.通过环境变量

网上看到有一篇How to configure Kestrel URLs in ASP.NET Core RC2

虽然还是通过配置文件配置,但是它不向其他文章,不需要读出配置信息,直接绑定就能用,还是贴代码看:

hosting.json

{
"server.urls": "http://localhost:60000;http://localhost:60001"
}

Program.cs

public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.Build(); var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build(); host.Run();
}

这样它也能监听

Now listening on: http://localhost:60000

Now listening on: http://localhost:60001

是不是很神奇!实战受不了了,扣源码!目前为止.net core最好的地方就是有源码!

通过溯源,我们可以知道主要是 WebHostBuilder 这个类,在Microsoft.AspNetCore.Hosting命名空间下。

主要的方法还是Build

        /// <summary>
/// Builds the required services and an <see cref="IWebHost"/> which hosts a web application.
/// </summary>
public IWebHost Build()
{
// Warn about deprecated environment variables
if (Environment.GetEnvironmentVariable("Hosting:Environment") != null)
{
Console.WriteLine("The environment variable 'Hosting:Environment' is obsolete and has been replaced with 'ASPNETCORE_ENVIRONMENT'");
} if (Environment.GetEnvironmentVariable("ASPNET_ENV") != null)
{
Console.WriteLine("The environment variable 'ASPNET_ENV' is obsolete and has been replaced with 'ASPNETCORE_ENVIRONMENT'");
} if (Environment.GetEnvironmentVariable("ASPNETCORE_SERVER.URLS") != null)
{
Console.WriteLine("The environment variable 'ASPNETCORE_SERVER.URLS' is obsolete and has been replaced with 'ASPNETCORE_URLS'");
} var hostingServices = BuildHostingServices();
var hostingContainer = hostingServices.BuildServiceProvider(); var host = new WebHost(hostingServices, hostingContainer, _options, _config); host.Initialize(); return host;
}

这边主要是构建一个WebHost对象,然后更进去看

通过Initialize方法查看源代码,我们可以知道是EnsureServer这个方法创建的url地址

private void EnsureServer()
{
if (Server == null)
{
Server = _applicationServices.GetRequiredService<IServer>(); var addresses = Server.Features?.Get<IServerAddressesFeature>()?.Addresses;
if (addresses != null && !addresses.IsReadOnly && addresses.Count == )
{
var urls = _config[WebHostDefaults.ServerUrlsKey] ?? _config[DeprecatedServerUrlsKey];
if (!string.IsNullOrEmpty(urls))
{
foreach (var value in urls.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
{
addresses.Add(value);
}
} if (addresses.Count == )
{
// Provide a default address if there aren't any configured.
addresses.Add("http://localhost:5000");
}
}
}
}

这里我们可以知道,原来它自己会从配置里面去读 _config[WebHostDefaults.ServerUrlsKey] 和 _config[DeprecatedServerUrlsKey]

WebHostDefaults.ServerUrlsKey的值是固定值

DeprecatedServerUrlsKey的值在WebHost这个对象一开始就定义了

哦!真相大白了。所以我们在配置文件里面设置“server.urls”就可以了。

总结:

综上所述,asp.net core启动的时候会自行读取环境变量里面的配置,实际点就是在项目属性里面增加如下配置:

已控制台方式启动,发现已经切换了端口。

那么这个是在开发环境,如何在产线部署呢。这个也很简单,以linux上部署为例,以守护进程supervisor启动程序,在supervisor的启动配置里面增加环境变量:

environment=ASPNETCORE_URLS='http://*:5001'

大功告成!一行代码都不需要改,哈哈~

参考文献:

win10下iis部署asp.net core rtm

.net core 启动域名及端口配置的更多相关文章

  1. windows环境下XAMPP安装、多域名多端口配置、与python环境并存

    一.去xampp官网下载最新版本的安装包,安装一般软件的安装步骤,一直下一步,不过如果你想安装到指定目录中的话,在选择安装位置的时候设置想要安装的位置. 二.我们在工作中经常遇到同时调试多个网站的情况 ...

  2. 三、调试IIS启动域名配置

    一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...

  3. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  4. tomact配置域名和端口直接访问网站

    tomact配置域名和端口直接访问网站,就是使用域名解析到主机,通过端口执行网站地址,实现访问,在上一章节中发布了两个web项目,但是都是执行同一个根文件夹,通过 http://localhost:8 ...

  5. 使用eclipse上Tomcat插件配置域名、端口号、启动时间详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7856284.html 邮箱:moyi@moyib ...

  6. Nginx配置基于多域名、端口、IP的虚拟主机

    原文:https://www.cnblogs.com/ssgeek/p/9220922.html ------------------------------- Nginx配置基于多域名.端口.IP的 ...

  7. apache 多端口配置和虚拟主机配置

    1 打开httpd.conf文件 2 添加端口监听 (找到Lisen 80 在后面添加 Listen 端口号 如Listen 1112) port =>你的端口 project_name=> ...

  8. 网卡配置和DNS配置,手动挂在nas存储的共享目录,网络相关其它操作命令,修改防火墙中的端口配置,resolv.conf配置详细介绍和网卡信息配置详细介绍

    1.   网卡配置和DNS配置 若想服务器能够发邮件,需要让部署的服务器能够访问到外网环境.若部署的服务器访问不到外网,通过ping www.baidu.com的方式执行的时候,会出现以下问题: &q ...

  9. Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器

    前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...

随机推荐

  1. JAVA类加载器概念与线程类加载器

    类加载器的功能:通过一个类的全限定名来获取描述此类的二进制字节流的过程 java的类加载器大致可以分为两类,一类是系统提供的,一类是由应用开发人员编写的.系统提供的类加载器有以下三种: 引导类加载器( ...

  2. request的生存期只限于服务器跳转

    症状: 刚才想做一个实验,在a.jsp中向request添加属性(页面编码为UTF-8),在b.jsp中删除该属性(页面编码为ISO-8859-1),通过ServletRequestAttribute ...

  3. Juqery 定时器 settimeout setInterval

    setTimeout 只执行一次 setTimeout(loading_tree,2000); function loading_tree(){ $('body').mLoading("hi ...

  4. 一款基于jQuery的超酷动画幻灯片

    今天给大家带来一款仿步步高vivo手机网站的一款首页焦点幻灯展示特效,带有超酷炫的动画特效,动态效果丝毫不逊色于flash动画,具有很强的视觉冲击力,推荐下载学习! 提示:兼容360.FireFox. ...

  5. C基础之移位操作

    因为左移操作不会导致符号位出现缺位,所以不考虑符号位,低位补0即可:右移操作会涉及到符号位出现缺位的问题,所以在有符号数的右移操作时要考虑符号位怎么补的问题. 左移操作(<<)对于无符号数 ...

  6. Linux下安装配置MediaWiKi全过程

    0.libxml2的安装   *下载http://rpmfind.net/linux/rpm2html/search.php?query=libxml2   *执行以下Linux命令进行安装 a)gu ...

  7. springboot 完整企业项目搭建实记

    昨天搭建ssm框架时突然想到可以搭建springboot来完美解决配置复杂的问题,今天学习了一下springboot的搭建,在此记录一下搭建的过程和踩过的坑 这里给自己定一个该框架搭建完成的目标,如下 ...

  8. 关于Cocos2d-x开发一个游戏的过程自述

    我在2016年12月6号完成了我的第一个自己独立完成的游戏,期间遇到各种各样的问题和困难,但是幸运的是问题都一一被解决了,现在我想总结一个整个的制作游戏的过程 使用的环境是VS2013+cocos2d ...

  9. js 版本号

    在web项目开发过程中,我们经常会引用css.js文件,更新文件后常出现缓存问题(明明更改了代码,在浏览器上访问的时候却没有发生变化),这种情况我们通常采用以下两种解决方案: 1.手动清除浏览器缓存 ...

  10. Oracle dbms_random随机数包详解

    Oracle dbms_random包主要用于获得随机数,可以为数字也可以为字母等,还可以实现混拼.常用函数如下: dbms_random.value 生成一个指定范围的38位随机小数(小数点后38位 ...