找回密码
 会员注册
查看: 154|回复: 0

Asp.net core 项目的发布和运行环境部署完整介绍(Window+IIS7)

[复制链接]

1389

主题

5

回帖

496万

积分

管理员

积分
4962990
发表于 2024-2-29 08:36:08 | 显示全部楼层 |阅读模式

        这段时间在做一个某行业信息系统项目,项目采用前后端离,后端通过Web Api 与前端交互,支持跨域访问,除API,还包含Service层、Model层、ORM。层与层这间采用依赖注入。
       WebApid引入了对其它层的程序集引用。整个项目只需发布WebApi和Web站点就可以了,两个项目可以部署在不同的服务器。身份验证通过令牌与OpenId达到跨域访问目的。
       项目功能基本完成,发发测试版本,服务器原来安装的是.Net FrameWork4.5 运行时环境,不支持.net core项目的运行,所以要重新安装运行时环境。
本方案是针对Windows server+IIS7 +asp.net core 2.1的部署方案。当然asp.net core项目一样可部署到其它OS上,还有Durck或Azure 或OpsDev上。如果Linux上,通过Kestrel代理,如果应用使用 Kestrel 服务器,Nginx、Apache 或 IIS 可用作反向代理服务器。 反向代理服务器接收来自 Internet 的 HTTP 请求,并将这些请求转发到 Kestrel。
      Asp.net core 项目有三种发布和运行部署方式:
        1、依赖框架的部署。 顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll 就可以运行一个名为 app 的应用程序。
     2、独立部署。 与 FDD 不同,独立部署 (SCD) 不依赖目标系统上存在的共享组件。 所有组件(包括 .NET Core 库和 .NET Core 运行时)都包含在应用程序中,并且独立于其他 .NET Core 应用程序。 SCD 包括一个可执行文件(如 Windows 平台上名为 app 的应用程序的 app.exe),它是特定于平台的 .NET Core 主机的重命名版本,还包括一个 .dll 文件(如 app.dll),而它是实际的应用程序。
        3、依赖框架的可执行文件。 生成在目标平台上运行的可执行文件。 类似于 FDD,依赖框架的可执行文件 (FDE) 是特定于平台的,而不是自包含的。 这些部署的运行仍依赖于现有的 .NET Core 共享系统级版本。 与 SCD 不同,应用仅包含代码和任何位于 .NET Core 库外的第三方依赖项。 FDE 生成在目标平台上运行的可执行文件。

    基于Windows server+IIS7 +asp.net core 2.1的发部和部署方案过程如下:
    IIS的安装与配置与asp.net 应用程序相同,就不再介绍 。
1、应用程序配置
2安装.NET CORE运行时。
3、安装.net core库
4、发布Web Api
5、配置站点
6、常见问题

    一、应用程序配置
    因为前后端分离,前端不需要.net core支持,部分使用Razor页面默认asp.net就可以了。所以下配置都是针对Web Api项目。
1、Program.cs
Program.cs 调用 CreateDefaultBuilder 以开始设置主机:
public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup()
                .Build();
CreateDefaultBuilder 将 Kestrel 服务器配置为 Web 服务器,并通过配置 ASP.NET Core 模块的基础路径和端口来启用 IIS 集成。
2、Web.Config配置
此文件在项目中找不到,一般会在发布时自动生成。
重点是配置正确的processPath  。
 


processPath 是.Net Core的安装程序路径,一般默认就可以了。
stdoutLogEnabled表示应用程序是否生成日志,通过它可以查看异常情况。
stdoutLogFile是日志文件路径,Logs目录默认没有,要手工在应用程序根目录下创建。

二、    安装.net core运行时和.net 库
在托管系统(本介绍为Windows)上安装 .NET Core 托管捆绑包。 捆绑包可安装 .NET Core 运行时、.NET Core 库和 ASP.NET Core 模块。最新托管捆绑包下载地址
https://dotnet.microsoft.com/dow ... ng-bundle-installer。.net,下载后会有.NET Core 2.2 Runtime & Hosting Bundle for Windows 两个文件,注意对应Window是64位还是32位系统 。 core库版本应和VS开发时的版本相同,本人项目用的VS2017 ,.net core2.0,
 

 

所以安装2.0或更高版本。
安装之后要重启服务1)停止windows进和激活服务 :net stop was /y   2 )重启web发布服务 : net start w3svc  3)重启IIS: iisrest . 否则会出现 Http Error 502.5 - Process Failure  错误。

三、    发布Web Api项目
1、    发布前要配置项目生成属性“生成XML文档文件”;
 


2、    如果有引用的下层.net core程序集也要配置生成XML文档文件;
3、    将项目选择为Release模式(开发编译时用的Debug模式)。



4、    cmd进入命令行(注意要在管理员权限下运行CMD),转向Web Api 应用程序所在的目录。我的是 D:\Workspace\do\WebPai
5、    在命令行执行 dotnet publish -c  release 。
 


 

 

6、发布完成

 


黄色提示不用管,这是编写代码习惯造成问题,不是错误,可以正常通过。发布的文件默认在目录bin\release\netcoreapp2.0 下。将目录下的所有文件拷贝到服务器IIS站点的目录下。

四、IIS中配置站点
1、添加站点
 


端口可以自己定一个,我用的是8086.站点是http://localhost:8086
2、配置应用程序池
 


至此,asp.net core web api 应用程序完美发布与部署,跑起来试试,一切OK。


五、常见问题:
    》返回500。这首先考虑是应用程序有误。
原因:
1、Program.cs没配置BuildWebHost 
见第一步。
2、项目属性没有生成xml文档


这是引于 Swagger  自动生成帮助时必需要选中的。

   》 Http Error 502.5 - Process Failure
原因是安装捆绑托管包后 没有重启 WAS   W3SVC  

    》 An error occurred while starting the application.
原因是版本没对应。我用的开发版本是asp.net2.0,所以要安装 2.0或以上版本。

更详细的说明可参见:https://docs.microsoft.com/zh-cn ... =aspnetcore2x 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 11:08 , Processed in 0.546954 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表