0 环境

  1. Visual Studio 2019 (v16.8.3)
  2. dotnet
C:\Users\liudy> dotnet --version
5.0.101
  1. Redis 5.0.3
  2. 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文件进行修改配置。

  1. 允许远程连接
    将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
  1. 修改默认端口
port 6565
  1. 连接密码
# 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项目创建及配置相关推荐

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

    基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目 转载于:https://github.com/Meowv/Blog 既然开发完成了,还是拿出来溜溜比较好,本篇是本 ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九) 转载于:https://github.com/Meowv/Blog 终于要接近尾声了,上一篇基本上将文 ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(八) 转载于:https://github.com/Meowv/Blog 上一篇完成了标签模块和友情链接模块 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(七) 转载于:https://github.com/Meowv/Blog 上一篇完成了后台分类模块的所有功能 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客文章详情页面的数据 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(五) 转载于:https://github.com/Meowv/Blog 上一篇完成了分类标签友链的列表查询 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的分页查询文章列表 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二) 转载于:https://github.com/Meowv/Blog 上一篇搭建了 Blazor 项目并 ...

最新文章

  1. math range error
  2. java大字段_java-最大连续子数组和(最大字段和)
  3. Java并发编程--ReentrantReadWriteLock
  4. 《Windows Phone 8 Development Internals》读书笔记-1-2-1-连载
  5. 1.4 面向对象的基本概念
  6. 基于智慧教室|无纸化会议的新选择:RTMP解决方案
  7. 企业如何快速应对市场环境的不断变化
  8. android 防止重复启动app,Android应用开发Android 防止启动页面(SplashActivity)被多次启动...
  9. mysql运用索引写出高效sql_从SQL Server到MySql(5) : 高性能的MySql 索引策略
  10. c# 串口发送接收数据
  11. ospf 指定dr_OSPF的基本配置及DR /BDR选举的实验
  12. homebrew 安装 mpv
  13. 计算机2017语言排名,2017计算机编程语言排行榜 java依然独占鳌头
  14. 吉他音阶训练——问题解答 (三)
  15. 每日一词20190301——比例尺和地图比例尺
  16. 从高排到低变成小楼梯儿歌_春季学期幼儿园常规儿歌律动,收藏了就能用上
  17. HCPL3120手册翻译
  18. 用dango框架搭建博客网站
  19. Java 版植物大战僵尸思路和源码分享!
  20. 采蘑菇电脑c语言,英菲尼迪终于升级英菲尼迪Q50L,内行人告诉你怎么选还配备主动降噪、胎压显示!凯美瑞都比不上它! 早买早享受...

热门文章

  1. 计算机网络基础 之二:物理层
  2. ClearCase洋文翻译-rebase(变基)
  3. ChatGPT的出圈与大佬们的焦虑
  4. 乐视网质押“新乐视智家”全部股权;静态扫码支付限额500元;松下召回116万部笔记本电脑丨价值早报
  5. Android仿照钉钉的人名头像
  6. 方舟服务器金币系统,金币获取汇总与大量获取金币建议
  7. 推荐一本计算机领域可以发的2区计算机智能医疗类SCI
  8. 【190115】VC++ 视频聊天系统源代码
  9. 一篇文章学会RabbitMQ。SpringAMQP操作RabbitMQ。RabbitMQ五种模式及其代码实现。
  10. ABAQUS软件动力分析模块对钻柱-钻头-岩石系统进行仿真模拟