.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())