APP下载

基于ASP.Net Core的工作日志上传系统的设计

2021-10-21王建祥

信息记录材料 2021年9期
关键词:文件夹视图日志

王建祥

(河南省济源钢铁<集团>有限公司信息化仪表处信息化科 河南 济源 454650)

1 引言

基于ASP.Net Core的工作日志上传系统是利用ASP.Net Core MVC的优势,使用基于内置依赖注入和接口技术的软件设计,实现的功能是:用户使用Web登录系统,添加工作日志记录,所添加的日志记录的文本添加到数据库中,上传附件文件添加到root用户下的/root/JobLogSystem/publish/wwwroot/file路径的文件夹中。

本系统的优点:(1)使用ASP.Net Core MVC技术,软件系统对用户来说使用B/S架构,较C/S架构的应用软件系统有明显优势[1],使整个系统的软件设计标准化和轻量化,用户使用Web登录添加工作日志记录。(2)使用ASP.Net Core的跨平台特性,将软件发布后的文件部署到Oracle Linux 7.6服务器进行测试和试运行。

2 总体设计

2.1 ASP.Net Core的特点

ASP.Net Core的优势:(1)开源、跨平台。ASP.NET Core是开放源代码通用开发平台,由Microsoft和.NET社区在GitHub上共同维护,跨平台支持 Windows、Linux和macOS,用于构建Web应用、IOT应用和移动后端APP应用;(2)性能优越。根据ASP.Net Core团队的性能测试数据,ASP.Net Core(.net core)相较Web(.net framework 4.6)程序性能提升约2300%;(3)内置依赖注入;(4)轻量级和模块化的中间件HTTP请求管道;(5)能够在Linux操作系统或Windows服务器的IIS上运行。

2.2 ASP.Net Core的特性

2.2.1 ASP.Net Core总体性能概述

本系统ASP.Net Core设计使用的技术主要有:(1)开发软件使用Visual Studio2019和c#语言,主要框架使用ASP.NET Core MVC,.Net Core2.2是目前较新的版本;(2)数据库使用.Net Core 2.2自带的EF Core2.2技术,切换数据库只需要修改几行代码就可实现;(3)使用ASP.NET Core Web API可构建多种客户端的http服务;(4)基于接口的异步编程技术提高运行效率和程序的可扩展性;(5)ASP.NET Core Identity身份认证技术,提高程序的安全性同时简化编程;(6)把编译的应用程序代码部署和发布到Oracle Linux 7.6服务器。

2.2.2 ASP.Net Core项目的总体架构

本项目使用ASP.Net Core MVC架构和C#编程技术,在编程完成后,由Visual Studio2019工具通过发布功能生成Publish文件夹,把Publish文件夹部署到Oracle Linux 7.6操作系统。发布和部署Publish文件夹到Oracle Linux 7.6操作系统过程如下。

(1)安装.net core sdk 2.2。

(2)安装Nginx反向代理服务器软件。反向代理服务器有安全过滤、内容缓存、负载均衡的作用。Nginx反向代理器开启后用户输入网址发起请求后,请求先到达Nginx代理服务器,Nginx代理服务器再把请求转给数据服务器,从而减轻数据服务器的压力。

(3)配置守护进程Supervisor,用于Oracle Linux 7.6服务器开机后可以自动启动运行.net core sdk 2.2,Oracle Linux 7.6服务器停机检修后重启不会影响用户Web访问。

综上所述,ASP.Net Core MVC项目总体架构见图1。

图1 ASP.Net Core MVC项目总体架构图

3 软件设计

本系统使用ASP.Net Core MVC架构,使用Visual Studio2019工具和C#进行软件开发,步骤如下。

3.1 基于内置依赖注入和接口技术的软件设计原理分析

3.1.1 Program.cs文件

Program.cs文件表明该项目本质是控制台项目,IIS Express运行按键右侧的下拉菜单中选择“JobLogUploadSystem”就可进入控制台运行程序;Program.cs作为Web应用程序的默认入口,不做任何修改的情况下,会调用同目录下 Startup.cs中的 ConfigureServices()方法和Configure()方法;Build方法构建Web应用程序,然后去运行CreateWebHostBuilder(args)调用下面的方法,返回IWebHostBuilder对象,从而运行Web应用程序,即启动始终运行监听http请求的任务;使用默认的配置信息来初始化新的IWebHostBuilder实例,为WebHost指定Startup类。

3.1.2 Startup.cs文件

Startup.cs文件启动项目后做初始化的设置工作,在ConfigureServices()方法中注入项目所需的服务和中间件。服务就是类,用于实现某功能的函数或称方法,中间件是方法和委托;ConfigureServices方法用于把各类服务services, 例如identity、ef、mvc等包括第三方服务注册register到asp.net core的容器container中去,并配置这些服务services。容器container是用来进行依赖注入dependency injection。所有注入的服务services,包括框架已经注册的服务services,在后面编程时可注入inject到代码,即在代码需要的地方能直接使用ConfigureServices()中已经依赖注入的对象。Configure()方法是asp.net core程序用来具体指定处理每个http请求的方法, 例如调用app.UseMvc()方法使程序通过mvc来处理http请求。

3.2 EF Core Code First方式设计数据库

3.2.1 创建C#实体类

在Models文件夹下创建实体类JobLog.cs,属性标签是[Required],需导入using System.ComponentModel.DataAnnotations,JobLog.cs实体类中的Id将会被EF Core自动识别成主键。

3.2.2 创建EF Core上下文类

创建继承于DbContext上下文基类的上下文类JobLogContext,JobLogContext中自动会有基类下方法属性可用,需导入using Microsoft.EntityFrameworkCore;此处注入方式使用通过需要传参的构造函数的类的注入。因为注入JobLogContext服务后,编程时使用该类实例时仍需调用该类的构造方法去实例化对象,注入服务时需传递连数据库的Action,因此构造函数必须是具有参数的构造函数,即通过需要传递参数的构造函数的类的注入。

3.2.4 根据实体类和上下文类生成数据库对象

根据实体类JobLog.cs和上下文类JobLogContext.cs,通过EF core的迁移技术从模型生成数据库对象。具体操作两个命令执行:(1)Visual Studio 2019-工具-NuGet包管理器-程序包管理控制台,输入如下命令:Add-Migration JobLog2。说明:Add-Migration为迁移数据命令,迁移名称是JobLog2,执行后会在项目根目录下生成Migrations文件夹,文件夹下生成相关的类。

(2)Update-Database命令。说明:执行该命令,生成SQL SERVER数据库中的相关数据对象。

3.2.5 添加操作数据库的仓储接口类

在JobLobSystem工程下创建文件夹Repository用于存放操作数据库的仓储文件,在Repository文件夹下添加IJobLogRepository.cs接口;

3.2.6 添加仓储接口类的实现类

添加JobLogRepository.cs类用于实现IJobLogRepository.cs接口,JobLogRepository.cs实现类内使用异步方法用于提高执行效率。

3.2.7 在Startup.cs中注入仓储类服务

在Startup.cs中注入仓储类服务JobLogRepository.cs用于操作数据库,此处使用接口形式注入。

3.2.8 添加JobLogController控制器

在Controller文件夹下添加JobLogController控制器,并实现Index操作及Add操作。

3.2.8.1 Controller文件夹下添加JobLogController控制器

3.2.8.2 展示添加页面

public IActionJobLog Add(){return View();}//显示增加记录界面。

3.2.8.3 展示添加日志记录界面

3.2.9 添加Add函数对应视图

添加Add()函数对应视图Add.cshtml,设计时按照如下参数设置[2];

视图名称:Add

模板:Create

模型类:JobLogModle (JobLogSystem.ViewModels)

数据库上下文类:JobLogContext(JobLogSystem.Models)

3.2.10 添加Index()函数对应视图

添加Index()函数对应视图Index.cshtml,设计时按照如下参数设置;

视图名称: Index

模板: List

模型类: JobLog(JobLogSystem.Models)

数据库上下文类: JobLogContext(JobLogSystem.Models)

3.3 实现工作日志分类多项选择

3.3.1 添加工作日志记录分类选项的流程

为工作日志记录添加可选类型的具体编程流程,见图2。

图2 为工作日志记录添加可选类型的具体流程

3.3.2 添加工作日志记录分类选项的效果

添加工作日志记录分类选项后的程序运行效果,见图3。

图3 添加工作日志记录分类选项的程序运行效果

3.4 系统集成Identity实现登录和注册

下面使用ASP.NET Core Identity实现用户注册和登录[3],以及绑定对应的JobLog.cs类,然后用户上传和查看JobLog记录。

3.4.1 安装Nuget依赖包

安装Microsoft.AspNetCore.Identity.EntityFramework CoreNuget依赖包,配合EF Core操作数据库存储数据。

3.4.2 添加用户类

在Models文件夹中添加继承于IdentityUser的JobLogUser类,JobLogUser类就会自动添加IdentityUser的默认username、email等常用的用户属性,也可添加用户地址等其他属性。JobLogUser代表网站的注册用户,内置的IdentityUser属性能根据需要扩展使用。

using Microsoft.AspNetCore.Identity; //需要导入Identity命名空间

3.4.3 改造上下文类

导入using Microsoft.AspNetCore.Identity.EntityFrameworkCore,把JobLogContext上下文类原来继承于DbContext.cs改成继承于IdentityDbContext.cs;

3.4.4 更新数据库对象

打开程序包管理控制台执行以下命令:

执行完毕后,SQL SERVER数据库即可更新对应的数据对象。

3.4.5 在Startup中注入Identity服务3.4.5.1 ConfigureService方法中注入Identity服务在Startup类的ConfigureService方法中注入Identity服务,通过依赖注入使Identity服务可用于应用程序。

3.4.5.2 Configure方法中调用UseAuthentication

在startup类的Configure()方法中调用UseAuthentication()方法为应用程序启动Identity中间件。

app.UseAuthentication(); //启 用UseAuthentication为应用程序启动Identity服务。

3.4.6 添加两个ViewModel用于生成视图

添加LoginViewModel类和RegisterViewModel类,分别对应于登录与注册的需要,并通过打上特性来保证相应字段的要求,后面会使用这两个类生成视图。

3.4.7 添加控制器

添加控制器AccountController

3.4.8 创建视图Login.cshtml及Register.cshtml

3.4.8.1创建Login.cshtml视图

按照如下配置创建Login.cshtml视图并修改其代码;

视图名称: Login

模板: Create

模板类: LoginViewModel(JobLogSystem.ViewModels)

数据上下文类: JobLogContext(JobLogSystem.Models)

3.4.8.2创建Register.cshtml视图

按照如下配置创建Register.cshtml视图并修改其代码;

视图名称: Register

模板: Create

模板类: RegisterViewModel(JobLogSystem.ViewModels)

数据上下文类: JobLogContext(JobLogSystem.Models)

创建视图Login.cshtml及Register.cshtml后修改其代码,即可实现注册—登录—注销等用户功能,具体实现过程:访问Account控制器,UserManager和SignInManager服务被注入到Controller中,如果是注册提交信息,Register操作调用UserManager的CreateAsync方法创建用户,注册成功后跳转到Login,输入刚注册的信息登录,Login操作调用SingInManager的PasswordSignInAsync方法登录用户并写Cookie信息,登录以后注销将调用LogOff操作,调用SignInManager的SignOutAsync方法注销用户,并清除Cookie信息。

3.5 软件总体结构

工作日志上传系统软件总体结构见图4。

图4 工作日志上传系统软件总体结构

4 软件部署实施和试运行

4.1 软件部署实施的具体步骤

(1)在虚拟机Vmware Workstation软件中安装Oracle Linux 7.6操作系统。

(2)在Oracle Linux 7.6的目录:在Visual Studio 2019软件执行发布操作,生成publish发布文件夹,将publish发布文件夹上传到Oracle Linux 7.6中root用户下的 /root/JobLogSystem路径。

(3)在Oracle Linux 7.6中root用户下安装.NET CORE SDK2.2软件[4]。

(4)安装配置Nginx反向代理软件,用于减轻服务器工作压力。

(5)配置守护进程Supervisor,使Oracle Linux 7.6操作系统重启后自动SDK服务,不影响用户访问Web服务。

4.2 ASP.NET CORE软件试运行具体步骤

(1)运行虚拟机下的Oracle Linux 7.6,见图5。

图5 运行虚拟机下的Oracle Linux 7.6

(2)在Google Chrome浏览器下,输入地址: 192.168.1.103:5000,回车运行,见图6。

图6 工作日志上传系统登录界面

(3)点击“注册”按键,见图7。

图7 点击注册按键

输入,点击“注册”;注册成功没有提示。注册错误会显示注册信息录入错误的原因,请按提示重新录入注册信息,直到注册成功。

(4)在登录界面,输入用户名“ZhangSan”,密码”123456”,点击“登录“。见图8。

图8 登录后界面

(5)点击“Create“按键后,手动录入新的运维记录,见图9。

图9 录入工作日志记录界面

(6)点击“Create“按键,见图10。

图10 添加工作日志记录后回到显示界面

(7)下载20210107张三上传的《20210107误工记录》,点击“张三 20-1-7下午9:58:27”记录对应的“下载按键”,弹出新建下载任务对话框,选择下载路径,点击保存,即可下载《20210107误工记录》文档,见图11。

图11 下载工作日志记录中的文件

5 结论

由上述软件部署实施和试运行可知:(1)跨平台和轻量级。本系统基于ASP.NET CORE的软件设计,可以经发布后部署到Linux服务器,实现了软件的跨平台部署;由于软件采用基于依赖注入和接口的技术,可以根据需要注入服务的特性使得程序较为轻量。

(2)轻松实现数据库迁移。本系统刚开始使用数据库SQL SERVER,发布操作生成的publish文件部署到Oracle Linux 7.6后,添加日志记录后,信息记录上传到SQL SERVER服务器,而日志记录中的文件则上传到Oracle Linux 7.6的/root/JobLogSystem/publish/wwwroot/file目录。只需要改动一句程序就可实现改用文件数据库SQlite,由于SQlite可以存在于publish文件夹中,所以添加日志记录后,信息记录和上传的文件记录都在Oracle Linux 7.6的publish文件夹中。

(3)EF CORE技术可以很方便地用于SQL SERVER数据库,对于EF CORE技术用于Oracle数据库,正在学习与研究。

猜你喜欢

文件夹视图日志
一名老党员的工作日志
扶贫日志
摸清超标源头 大文件夹这样处理
5.3 视图与投影
游学日志
视图
调动右键 解决文件夹管理三大难题
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
挂在墙上的文件夹