asp.net core的基本部署

随着.net core正式版的推出,我也准备开始使用这种微软有史以来第一次跨平台的技术(本人从来不学也不看beta版的技术),使用VS2017新建一个.net core的web应用程序

这里随便选什么都可以,其实创建出来的都一样,在core中,MVC和WebApi的管道已经统一,所以在类库中已经不会再出现API字眼(虽然实际上,现在MVC早已没人用了)的类了,

建完以后,大概长这样

忽略host.json,那个是我自己加的,打开program,可以发现,web应用程序本质上就是一个控制台程序,

请再次忽略InitConfigurationContainer方法,这个也是我自己加的,后面的文章会讲到。

所以,请记住,.net core从来就没有所谓的web应用程序,所有程序的入口点都是暴露在外面的,以静态方法Main作为入口函数,所谓asp.net core,也是在这个函数中建立了一个WebHost来执行web的监听与处理。这就是为什么说,asp.net core与IIS没有任何关系了

先简单讲一下,这段代码中WebHost通过UseStartup将启动类指定到了Startup类(其实也可以不指定,WebHost会根据一些规则自己去找,这个以后再讲),在WebHost执行Run方法后,就会去执行Startup,这里,还看到有一个叫UseIIIntegration的方法,调用这个方法后,就可以让IIS充当对外的web接收者(反向代理),将请求转给.net core程序处理,这也是一种在windows中的部署方式,当然如果不使用这种部署方式,调用这个方法,也不会有任何副作用。

再来看看Startup,

里面有两个方法ConfigurationService和Configure,系统会先执行ConfigurationService再执行Configure,其中ConfigurationService是可选方法,也就是说即使没有这个方法,也不会报错,

那么这两个方法是干什么用的呢,这里简单说一下,ConfigurationService是用来配置服务的,这个方法提供了一个IServiceCollection,这是一个依赖注入的容器,所有在这里注册的类,之后都可以根据配置自动创建出实例来,IServiceCollection也提供了一些扩展方法来帮助完成一些默认服务的注册,比如这里的AddMvc方法,就是用来注册MVC和WebApi需要用到的服务的,注意,有些服务是中间件必备的,比如这个AddMvc,如果这里不调用,那么在Configure中即使注册了中间件(UseMvc),也将不起作用。

Configure方法提供了IApplicationBuilder参数,通过这个参数我们可以用来注册中间件,比如这里的UseMvc,所谓中间件,就是以前版本中Owin的中间件,是一样的,用来在http管道中拦截和处理请求,由于现在asp.net core已经不再跟IIS绑定了,所有的都是中间件的概念,反而不再特意标识出owin了。

你会发现在Configure中还有几个参数,其实,除了ConfigurationService这个方法的参数是固定的以外,Configure方法和Startup构造函数的参数都可以随便定义多少个,前提是只要IServiceCollection容器中已经注册过了就行(Startup构造函数中的参数需要在WebHost的ConfigureServices中注册),这也是依赖注入容器的强大之处,更重要的是,中间件的构造函数与Invoke方法、Mvc或WebApi的构造函数、Mvc的View的构造函数,都是一样采用这种方式的。

接着再看一下Controller,asp.net core应用程序创建完成后,默认带了一个ValuesController,

那个构造函数中的IHostingEnvironment就是我加的,依赖注入容器会自动实例化,这里要注意和之前的版本不一样,没有RoutePrefix这样的特性了,Route代替了它,而在方法中的属性路由模板,则直接在HttpGet、HttpPost等Http动作特性里面直接定义,之前也说了,Mvc和WebApi已经统一,因此,两者都是继承于Controller基类,系统自动会根据方法的返回类型执行不同的处理,请忘了Mvc和WebApi的区别吧。

最后,要说一下部署,.net core的部署分为两种,一种叫便携式部署,这种部署方式和以前一样,需要提前在服务器上安装framework,使用VS发布出来的都是这种,这种方式的执行,需要依靠dotnet命令来执行,需要定位到执行目录下,执行命令  dotnet 程序集。

还有一种是直接将framework一起打包在程序中,这种发布出来的直接是可执行程序(在windows中就直接是exe文件),这种不需要服务器安装framework,要想生成这种可执行文件,

需要执行dotnet build -r 目标系统或者dotnet publish -c release -r 目标系统,第一个是用来生成Debug版本的文件,第二个是用来生成release版本的文件,想要能够正常执行这两个命令,需要修改项目的csproj文件,

在这个地方写上需要生成的环境名称,用;隔开,有很多系统可以写,可以去网上查一下,这里不说了,当csproj文件被修改后,vs会自动通过nuget获取各个不同系统需要的包,这个过程可能会比较慢,当完成后,执行之前的命令,则会在指定目录下生成以目标系统名称为名字的文件夹,这个文件夹里面就是目标系统的可执行文件。

之前说过,对于asp.net core来说,IIS可以作为反向代理与它集成,要做到这个,除了需要在程序中调用UseIIIntegration,IIS本身也需要安装名称为DotNetCore_WindowsHosting的程序,安装完成后,可以在IIS的模块中看到名称为AspNetCoreModule的模块,该模块将拦截请求并转发给asp.net core程序处理

接下来是就和正常的配置没什么区别了,新建一个web站点,定位到build的文件夹中,唯一需要注意的是,因为IIS仅仅起到一个反向代理的作用(其实,也可以作为处理静态内容的服务,这个和java中分离静态文件和servlet的方式异曲同工),所以在应用程序池中需要选择无托管代码

系统启动后,会发现在服务器进程中多了一个dotnet.exe的进程,要以附加进程的方式调试的话,必须附加这个进程,而不是w3wp.exe

时间: 2024-11-10 11:37:43

asp.net core的基本部署的相关文章

ASP.NET Core 1.0 部署 HTTPS

ASP.NET Core 1.0 部署 HTTPS ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1) 提示 更新时间:2016年01月23日. 在目前介绍 ASP.NET Core 1.0 的中英文文章中,我没有找到关于部署HTTPS的, 究其原因,除了暂时无法跨平台外,就算是很少人有这个需求,但我还是决定写一下. 警告 目前( 1.0.0-rc1-update1 )仅支持完整版的dnx451,dnxcore5需要rc2的支持.目前只能运行在Win

ASP.NET Core 1.0 部署 HTTPS (.NET Core 1.0)

这两个月要做一个项目,正逢ASP.Net Core 1.0版本的正式发布.由于现代互联网的安全要求,HTTPS加密通讯已成主流,所以就有了这个方案. 本方案启发于一个旧版的解决方案: ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1) http://www.cnblogs.com/qin-nz/p/aspnetcore-using-https-on-dnx451.html?utm_source=tuicool&utm_medium=referral

ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)

ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)? 警告 您当前查看的页面是未经授权的转载! 如果当前版本排版错误,请前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnetcore-using-https-on-dnx451.html 提示 更新时间:2016年01月23日. 在目前介绍 ASP.NET Core 1.0 的中英文文章中,我没有找到关于部署HTTPS的, 究其原因,除了暂时无法跨平台外,就算是

ASP.NET Core开发Docker部署

ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细了解一下Docker的用途,以及真实的应用场景. Docker源于PaaS,PaaS的应用场景即是Docker的应用场景. Platform as a Service: 平台即服务, 是面向软件开发者的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软

ASP.NET Core开发-Docker部署运行

ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细了解一下Docker的用途,以及真实的应用场景. Docker源于PaaS,PaaS的应用场景即是Docker的应用场景. Platform as a Service: 平台即服务, 是面向软件开发者的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软

asp.net core 2.1 部署 centos7

asp.net core 2.1 部署 centos7 Kestrel 非常适合从 ASP.NET Core 提供动态内容. 但是,Web 服务功能不像服务器(如 IIS.Apache 或 Nginx)那样功能丰富. 反向代理服务器可以从 HTTP 服务器卸载服务静态内容.缓存请求.压缩请求和 SSL 终端等工作. 反向代理服务器可能驻留在专用计算机上,也可能与 HTTP 服务器一起部署. 鉴于此指南的目的,使用 Nginx 的单个实例. 它与 HTTP 服务器一起运行在同一服务器上. 参考文档

ASP.NET Core使用TopShelf部署Windows服务

asp.net core很大的方便了跨平台的开发者,linux的开发者可以使用apache和nginx来做反向代理,windows上可以用IIS进行反向代理. 反向代理可以提供很多特性,固然很好.但是还有复杂性,我们也可以使用windows service来直接启动kestrel. asp.net core官方网站提供了一种基于windows服务部署的方法:在 Windows 服务中托管 ASP.NET Core 这种方式需要修改代码,然后部署的时候,使用命令行创建.安装服务,然后再启动. 感觉

阿里云容器服务与 ASP.NET Core 的 Docker 部署:用 docker secrets 保存 appsettings.Production.json

这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json 传递给运行在容器中的 asp.net core 应用. Docker 针对这样的应用场景已经提供了解决方案 —— Docker Secrets,对应的 docker 命令是 docker secret .我们就用 docker secrets 解决了这个问题,在这篇随笔中分享一下. 首先在阿里云容器

Asp.Net Core 发布和部署(Linux + Jexus )

前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在 asp.net core 中对我们的已经完成的程序进行发布和部署. 有关如何使用 Nginx 进行部署,请参见本人的另一篇文章:http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html 目录 安装 Liunx DotNet 环境 新建一个 Web 项目,并发布 使用 Jexus 进行反向代理 安装 Linux DotNet 环