• 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

  • 相关阅读:
    C++ 小心你的析构函数不会执行
    sqlserver同步服务报错和链接服务器总结
    第37周星期5小结
    代码审核学到的两个delphi内存泄漏问题
    第36周星期四小结如何测试sql服务是否安装并正常运行
    第37周星期日
    第37周星期六几篇文摘
    第36周星期五小结
    第37周星期一小结
    2012年第37周星期三小结
  • 原文地址:https://www.cnblogs.com/rhwleo/p/6883561.html
Copyright © 2020-2023  润新知