.net5封装c++动态库开发笔记
目录
1.部署IIS
2.部署linux+Docker
功能说明:
1. 提供swagger文档(需要显示注释),
swagger配置:在项目属性->生成 中勾选 xml文档
Startup 中配置
返回值定义:
效果如下:
2. 2个Post接口,参数使用json格式
2.1 controller方法定义
2.2 controller注入services
3. 接口需要进行签名验证,返回值做加密处理
请求接口前先判断参数以及本次请求是否合法
增加加密拦截器
请求方法前验证
先判断必要参数是否齐全是否正确
再判断redis中是否存在本次请求(1分钟之内不能重复请求)
再判断时间戳误差范围不能超过1分钟
请求完成后加密返回值
注入:使拦截器起作用
4. 处理接口的统一异常返回
注入到controller中
5. 日志记录(使用Serilog)
安装 Serilog.AspNetCore
6. 其他
调用c++库 需要将项目打包成 x86
设置swagger中参数 首字母 大写
7.部署
1.部署IIS
运行环境下载地址
项目发布
将xml文件 设置为始终复制
发布到文件夹
IIS配置
程序池 配置为 无托管
在程序池高级设置中启用win32
开启加载用户配置
不开启会有警告日志
报错1:Failed to load ASP.NET Core runtime(win7 X64)
cmd查看 dotnet --info报错信息如下
解决:是缺少KB2533623 这个补丁 下载安装之后重启电脑就好了
2.1.部署linux+Docker
linux版本 centeros7
1.安装.net环境
官网下载地址
网盘下载:提取码abcd
下载完成使用 winscp上传(直接复制 会报错导致解压不了)
然后解压
命令执行
新建文件夹: mkdir dotnet
解压 :tar zxf dotnet-sdk-5.0.100-linux-x64.tar.gz -C $HOME/donet
找到etc下面的profile文件 在最后面添加
export DOTNET_ROOT=$HOME/donett
export PATH=$PATH:$HOME/donett
执行 source /etc/profile
执行 donet --version
2.安装docker环境
下载离线安装包或者从上面的网盘
上传到主文件夹
解压后 复制到 /usr/bin下面
解压命令
tar zxvf 文件名.tgz
复制命令:
sudo cp $HOME/docker/* /usr/bin
创建docker.service 文件
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
复制到 /etc/systemd/system 目录下
复制命令: sudo cp $HOME/docker.service /etc/systemd/system
注册 docker.为服务:
vim /etc/systemd/system/docker.service (执行完关闭终端 重新打开)
启动docker
chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
systemctl daemon-reload #重载unit配置文件
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启
验证
systemctl status docker #查看Docker状态
docker -v #查看Docker版本
3.发布
项目中添加Dockerfile文件
修改为
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim AS base #微软的慢 替换为阿里云
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY ./publish .
ENTRYPOINT ["dotnet", "Webapi.dll"]
项目发布
发布完成将 文件夹和dockfile上传到Home/Root/Webapi下
开始发布
进入webapi文件夹:cd Root/Webapi
创建docker镜像 :docker build -t webapi . (后面有个. 中间有空格)
查看创建的镜像: docker images
创建运行时:
不设置自启动:docker run -d -p 81:80 --name webapi webapi
设置自启动:docker run -d -p 81:80 --restart always --name webapi webapi
后面补充自启动:docker update --restart=always webapi
查看是否启动成功:docker ps 或 docker ps -a
Up说明成功
查看是否启动成功:curl localhost:81
网站访问:localhost:81/swagger
如果访问出现404:
在项目Program.cs 中添加以下代码
.UseContentRoot(Directory.GetCurrentDirectory())