基于ABP vNext 4.X(.Net 5)的Blazor项目创建及配置
0 环境
- Visual Studio 2019 (v16.8.3)
- dotnet
C:\Users\liudy> dotnet --version
5.0.101
- Redis 5.0.3
- CLI
C:\Users\liudy> dotnet tool update -g Volo.Abp.Cli
工具“volo.abp.cli”已重新安装最新稳定版本(版本“4.0.2”)。
参考:开发环境设置
1 创建解决方案
1.1 目的
.NET5,已经于2020年11月11日正式发布,是一款开源、跨平台产品。.NET5作为新生平台,在容器化、DevOps、微服务、CI/CD、云原生的互联网时代里,优势显著!ABP vNext也已经迁移至.Net5,现在最新的版本是4.0.2。基于此,创建一个基于Blaor UI、EF数据库、分层的、identity server 独立部署的ABP(.Net5)项目,并将数据库修改为 MySql。
1.2 利用CLI创建
定位到目标目录,并使用CLI(abp new Acme.BookStore -u blazor -d ef --separate-identity-server --tiered
)创建。
PS C:\Users\liudy> cd E:\Projects\dotnet\Abp\Acme
PS E:\Projects\dotnet\Abp\Acme> abp new Acme.BookStore -u blazor -d ef --separate-identity-server --tiered
Acme.BookStore:项目名
-u blazor:UI框架采用blazor。
-d ef:表示使用Entity Framework Core作为DB Provider(默认值,可不写)。
–separate-identity-server IDs独立部署
–tiered 分层
参考:CLI使用说明
1.3 创建结果
此时在目标目录下生成了一个aspnet-core文件夹,目录结构如下:
└─aspnet-core
├─src
│ ├─Acme.BookStore.Application、
│ ├─Acme.BookStore.Application.Contracts
│ ├─Acme.BookStore.Blazor
│ ├─Acme.BookStore.DbMigrator
│ ├─Acme.BookStore.Domain
│ ├─Acme.BookStore.Domain.Shared
│ ├─Acme.BookStore.EntityFrameworkCore
│ ├─Acme.BookStore.EntityFrameworkCore.DbMigrations
│ ├─Acme.BookStore.HttpApi
│ ├─Acme.BookStore.HttpApi.Client
│ ├─Acme.BookStore.HttpApi.Host
│ └─Acme.BookStore.IdentityServer
└─test
├─Acme.BookStore.Application.Tests
├─Acme.BookStore.Domain.Tests
├─Acme.BookStore.EntityFrameworkCore.Tests
├─Acme.BookStore.HttpApi.Client.ConsoleTestApp
└─Acme.BookStore.TestBase
除了Test项目,src下一共有12个项目。
1.4 ABP项目间依赖关系
参考:Application Startup Template
2 数据库修改为MySQL
这部分内容可以参考:Abp vNext项目搭建及切换成MySQL。但需要注意的是:
“Acme.BookStore.EntityFrameworkCore.DbMigrations”项目下“BookStoreMigrationsDbContextFactory.cs”文件:
var builder = new DbContextOptionsBuilder<EyinzhangMigrationsDbContext>().UseSqlServer(configuration.GetConnectionString("Default"));
修改为:
var builder = new DbContextOptionsBuilder<BookStoreMigrationsDbContext>().UseMySql(configuration.GetConnectionString("Default"), ServerVersion.AutoDetect(configuration.GetConnectionString("Default")));
也就是UseMySql方法进行了重载,否则在进行数据迁移时,可能会出现“A relational store has been configured without specifying either the DbConnection or connection string to use.”错误(数据迁移错误)。
3 Redis配置
3.1 安装
因为之前已经在阿里云服务器上安装了redis,所以就不在本地开发机安装了,直接利用远程的redis服务器。这部分可以参考:CentOS8.2安装Redis及简要配置
3.2 配置
因为要远程连接redis,那么还需要对redis.conf文件进行修改配置。
- 允许远程连接
将bind 127.0.0.1注释掉,允许所有连接
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# bind 127.0.0.1
- 修改默认端口
port 6565
- 连接密码
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
requirepass 123456
3.3 Redis连接字符串
修改HttpApi.Host和IdentityServer项目下的appsettings.json文件中的Redis配置:
"Redis": {"Configuration": "39.101.10.102:6565,password=123456"},
4 运行HttpApi.Host
将HttpApi.Host设置为启动项目,如无意外,那么会正常启动:
[20:57:22 INF] Starting Acme.BookStore.HttpApi.Host.
[20:57:28 INF] Loaded ABP modules:
[20:57:28 INF] - Volo.Abp.AuditLogging.AbpAuditLoggingDomainSharedModule
... ....
[20:57:29 DBG] Started background worker: Volo.Abp.BackgroundJobs.BackgroundJobWorker
[20:57:29 DBG] Started background worker: Volo.Abp.IdentityServer.Tokens.TokenCleanupBackgroundWorker
[20:57:29 INF] Initialized all ABP modules.
[20:57:30 INF] Now listening on: https://localhost:5001
[20:57:30 INF] Now listening on: http://localhost:5000
[20:57:30 INF] Application started. Press Ctrl+C to shut down.
[20:57:30 INF] Hosting environment: Production
[20:57:30 INF] Content root path: E:\Projects\dotnet\Abp\Acme\aspnet-core\src\Acme.BookStore.HttpApi.Host
5 IIS配置
因为是分层、IDs独立模式,因此要正常运行Blazor,需要先运行HttpApi.Host和IdentityServer两个项目。一种方式是通过命令行直接运行(如: dotnet Acme.BookStore.HttpApi.Host.dll)。考虑到这种方式比较麻烦,每次都要手动运行。因此考虑将其部署到开发机的IIS中。
5.1 IIS部署
这部分可参考:.Net Core 3.1 项目发布到IIS教程
5.2 端口修改
在创建解决方案时,IdentityServer项目的端口配置(launchSettings.json)可能如下:
"profiles": {"Acme.BookStore.IdentityServer": {"commandName": "Project","launchBrowser": true,"applicationUrl": "https://localhost:44328","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}}}
也就是使用44328这个端口。而HttpApi.Host则使用44380端口。为避免在VisualStudio里运行与IIS端口冲突和便于记忆,将IdentityServer项目在IIS中的端口调整为了8090,HttpApi.Host项目在IIS中的端口为8070。
相应地,我们将Blazor项目的appsettings.json文件中对应端口修改为IIS的设置:
{"AuthServer": {"Authority": "http://localhost:8090","ClientId": "BookStore_Blazor","ResponseType": "code"},"RemoteServices": {"Default": {"BaseUrl": "http://localhost:8070"} }
}
注意:在设置IIS端口时,一开始为了方便,直接设置了个6000端口,发现用Edge死活也打不开,提示ERR_UNSAFE_PORT错误。
经查,Chromium内核浏览器有默认非安全端口导致。可参考:Chrome 错误代码:ERR_UNSAFE_PORT
6 运行Blazor
将Acme.BookStore.Blazor项目设置为启动项目,Ctrl+F5运行项目。
info: Microsoft.Hosting.Lifetime[0]Now listening on: https://localhost:44307
info: Microsoft.Hosting.Lifetime[0]Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]Content root path: E:\Projects\dotnet\Abp\Acme\aspnet-core\src\Acme.BookStore.Blazor
6.1 ABP vNext中IdentityServer禁用SSL/未启用SSL问题
使用基于Chromium的 Edge浏览器访问Blazor站点,点击登录时,发现登录不成功。直接访问http://localhost:8090(本示例)依然登录不成功。但换成IE浏览器发现可以正常使用。
6.2 解决方法
在启用了Identity Server 4 的网站上使用HTTP(未启用SSL/禁用SSL)时,由于Chrome在8x版本中所做的更改,用户可能无法登录。问题原因可参考:.NET Core 3.1 中的中断性变更。问题解决可参考:在使用ABP VNEXT中,如何解决IdentityServer4的登录问题
由于上面的方法要改动的地方较多,同时在生产环境中,为了提升安全,还是应该启用SSL。因此,我在IIS中将IdentityServer站点启用SSL。相应地将Blazor项目的appsettings.json文件中的Authority设置修改为:https://localhost:8090
基于ABP vNext 4.X(.Net 5)的Blazor项目创建及配置相关推荐
- 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目
基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目 转载于:https://github.com/Meowv/Blog 既然开发完成了,还是拿出来溜溜比较好,本篇是本 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九) 转载于:https://github.com/Meowv/Blog 终于要接近尾声了,上一篇基本上将文 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八) 转载于:https://github.com/Meowv/Blog 上一篇完成了标签模块和友情链接模块 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七) 转载于:https://github.com/Meowv/Blog 上一篇完成了后台分类模块的所有功能 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客文章详情页面的数据 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五) 转载于:https://github.com/Meowv/Blog 上一篇完成了分类标签友链的列表查询 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的分页查询文章列表 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二) 转载于:https://github.com/Meowv/Blog 上一篇搭建了 Blazor 项目并 ...
最新文章
- math range error
- java大字段_java-最大连续子数组和(最大字段和)
- Java并发编程--ReentrantReadWriteLock
- 《Windows Phone 8 Development Internals》读书笔记-1-2-1-连载
- 1.4 面向对象的基本概念
- 基于智慧教室|无纸化会议的新选择:RTMP解决方案
- 企业如何快速应对市场环境的不断变化
- android 防止重复启动app,Android应用开发Android 防止启动页面(SplashActivity)被多次启动...
- mysql运用索引写出高效sql_从SQL Server到MySql(5) : 高性能的MySql 索引策略
- c# 串口发送接收数据
- ospf 指定dr_OSPF的基本配置及DR /BDR选举的实验
- homebrew 安装 mpv
- 计算机2017语言排名,2017计算机编程语言排行榜 java依然独占鳌头
- 吉他音阶训练——问题解答 (三)
- 每日一词20190301——比例尺和地图比例尺
- 从高排到低变成小楼梯儿歌_春季学期幼儿园常规儿歌律动,收藏了就能用上
- HCPL3120手册翻译
- 用dango框架搭建博客网站
- Java 版植物大战僵尸思路和源码分享!
- 采蘑菇电脑c语言,英菲尼迪终于升级英菲尼迪Q50L,内行人告诉你怎么选还配备主动降噪、胎压显示!凯美瑞都比不上它! 早买早享受...
热门文章
- 计算机网络基础 之二:物理层
- ClearCase洋文翻译-rebase(变基)
- ChatGPT的出圈与大佬们的焦虑
- 乐视网质押“新乐视智家”全部股权;静态扫码支付限额500元;松下召回116万部笔记本电脑丨价值早报
- Android仿照钉钉的人名头像
- 方舟服务器金币系统,金币获取汇总与大量获取金币建议
- 推荐一本计算机领域可以发的2区计算机智能医疗类SCI
- 【190115】VC++ 视频聊天系统源代码
- 一篇文章学会RabbitMQ。SpringAMQP操作RabbitMQ。RabbitMQ五种模式及其代码实现。
- ABAQUS软件动力分析模块对钻柱-钻头-岩石系统进行仿真模拟