以1個具體介面為例來展示騰訊雲.NET SDK的使用
- 2020 年 3 月 13 日
- 筆記
一、做足準備
【.NET Core和ASP.NET Core】是什麼,它們跟【.NET Framework和ASP.NET】的區別是什麼,為什麼要選用前者
https://docs.microsoft.com/zh-cn/dotnet/core/
https://docs.microsoft.com/zh-cn/dotnet/core/about
https://docs.microsoft.com/zh-cn/aspnet/core/?view=aspnetcore-3.1
概述里的3個鏈接介紹很詳細,建議仔細讀一下
.NET Core 是開放源程式碼通用開發平台,由 Microsoft 和 .NET 社區在 GitHub 上共同維護。 它跨平台(支援 Windows、macOS 和 Linux),並且可用於生成設備、雲和 IoT 應用程式。
.NET Core是.NET Framework的重新設計併兼容它,而且具備跨平台等多種優點。
ASP.NET Core是.NET Core的Web框架
ASP.NET是.NET Framework的Web框架
如果你在.NET Core和.NET Framework之間選了.NET Core,那在ASP.NET Core和ASP.NET之間肯定也是選ASP.NET Core了
不論是.NET Core還是.NET Framework,程式語言一般用C#。
二、環境安裝
依賴說明:https://docs.microsoft.com/zh-cn/dotnet/core/install/dependencies?pivots=os-linux&tabs=netcore31
需要先安裝依賴
yum install lttng-ust
yum install libcurl
yum install openssl-libs
yum install krb5-libs
yum install libicu
yum install zlib
yum install libunwind
yum install libuuid
安裝介紹:
https://dotnet.microsoft.com/download/dotnet-core/3.1
方式一,腳本安裝:https://dotnet.microsoft.com/download/dotnet-core/scripts
方式二,yum安裝:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7
請仔細看完上面幾個官方文檔
我選方式一,腳本安裝
我新購的centos7.4一上來沒安裝最開始說的各種依賴就直接下載腳本運行,明確告知我缺少哪些依賴
wget https://dotnetwebsite.azurewebsites.net/download/dotnet-core/scripts/v1/dotnet-install.sh
sh dotnet-install.sh
Ctrl+C停止後安裝依賴
yum install lttng-ust libcurl openssl-libs krb5-libs libicu zlib libunwind libuuid
然後重新執行腳本仍然報錯
zlib我明明安裝了的,如何是好?選方案二,yum安裝方式試試?不,遇到問題我不能躲。
分析下,centos7.4是什麼時候出的,.net core 3.1.102又是什麼時候出的?一前一後差幾年,我估計換個高版本的系統應該就可以了,想換centos8.0騰訊雲沒有,最高centos7.6,那就試試7.5或7.6吧,畢竟大版本相同,我估計出相同問題的概率比較大,試了果不其然都是一樣的告警,提示找不到zlib,我估計是.net core 3.1.102版本太高,需要的zlib版本也比較高吧,於是想到升級zlib到最新版本,只能源碼編譯安裝了。
這裡我犯了大錯,先卸載了當前zlib,想等卸載後再升級最新版,結果直接把系統搞壞了,這是因為系統底層很多命令和服務都依賴zlib庫。說下卸載過程:
用yum remove zlib卸載不了,我就想著用rpm -qa|grep zlib查看下版本是zlib-1.2.7-18.el7.x86_64
然後用rpm –nodeps -e zlib-1.2.7-18.el7.x86_64強制卸載,卸載後完蛋了,除過vim等幾個少數命令能用外,其他的命令全完蛋了,yum不能用、wget不能用、curl不能用、新開窗口重新SSH連不上系統,等等一系列報錯,報錯基本都是這句話
error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
可以說系統報廢了,只能找個正常機器查看下都哪些文件被刪掉了,然後用救援模式工具進去把這些文件放到原位置試試,其實主要是/usr/lib64/libz.so.1.2.7這一個文件,/usr/lib64/libz.so和/usr/lib64/libz.so.1是/usr/lib64/libz.so.1.2.7的軟鏈接。
救援模式的想法我沒有進一步驗證,知道怎麼出的錯,以後規避就是了。
假設我沒做rpm –nodeps -e zlib-1.2.7-18.el7.x86_64,千萬不能做
目前的需求就是升級zlib1.2.7到最新版zlib1.2.11
wget http://zlib.net/zlib-1.2.11.tar.gz
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure –prefix=/usr/local/zlib
make
make check
make install
cp /usr/local/zlib/lib/libz.so.1.2.11 /usr/lib64/
mv /usr/lib64/libz.so.1.2.7 /usr/lib64/libz.so.1.2.7.bak
rm /usr/lib64/libz.so 如果報【rm: 無法刪除"/usr/lib64/libz.so": 沒有那個文件或目錄】請忽略繼續向下走
ln -s /usr/lib64/libz.so.1.2.11 /usr/lib64/libz.so
rm /usr/lib64/libz.so.1
ln -s /usr/lib64/libz.so.1.2.11 /usr/lib64/libz.so.1
echo "/usr/local/zlib/lib" >> /etc/ld.so.conf
最後執行ldconfig -v能看到libz.so.1 -> libz.so.1.2.11就代表成功了
然後再執行sh dotnet-install.sh就不報找不到zlib了
安裝好了,但是需要處理下環境變數
通過修改.bashrc文件:
vim ~/.bashrc
//在最後一行添上export PATH=/root/.dotnet:$PATH
生效方法(二選一):
①關閉當前終端窗口,重新打開一個新終端窗口就能生效
②輸入「source ~/.bashrc」命令,立即生效
有效期限:永久有效
用戶局限:僅對當前用戶
三、使用騰訊雲dotnet sdk
兩種辦法:
①git clone方式
yum install git -y
git clone https://github.com/TencentCloud/tencentcloud-sdk-dotnet.git
先解析一下目錄結構
TecentCloud.sln是解決方案,你可以打開看它的內容,包含了3個項目
真正的SDK其實就是TencentCloud目錄(項目),TecentCloudExamples、WindowsFormsApp這2個目錄分別是終端項目和窗體項目,我們在Linux命令行下調試的是TecentCloudExamples這個目錄,即console項目,裡面的例子程式碼調用的是上層目錄里的TencentCloud項目,所以你去看TecentCloudExamplesTecentCloudExamples.csproj的內容如下,中間那段就是引用,用的是2個..代表上層目錄,上層目錄里的TecentCloud項目
上圖3小段,第1段是必須的,需要根據實際情況寫版本號,第2段是git clone方式或直接下載壓縮包、解壓使用的方式的TencentCloud項目引用,第3段是NuGet方式獲取引用,是第1段+第2段還是第1段+第3段請根據實際情況來,我們壓縮包里TecentCloudExamplesTecentCloudExamples.csproj是3段都有,雖說不影響結果,但是是不嚴謹的。
由於我安裝的是3.1.102(執行dotnet –version查看),大版本是3.1,.csproj里netcoreapp後面是3.1
這裡我用的git clone方式、不是NuGet方式,所以我這裡是第1段+第2段,即
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..TencentCloudTencentCloud.csproj" />
</ItemGroup>
下面正式開干:
在TecentCloudExamples的平級目錄(/root/tencentcloud-sdk-dotnet/)創建一個Test文件夾
mkdir Test
cd Test
dotnet new console
這樣終端項目就自動創建好了,如下圖
然後dotnet add reference ../TencentCloud/TencentCloud.csproj
然後cat Test.csproj查看如下
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..TencentCloudTencentCloud.csproj" />
</ItemGroup>
然後vim Program.cs替換Program.cs的程式碼為api explorer里準備好的程式碼
secretid、secretkey是你部署cdn站點的帳號的雲api密鑰對,請注意安全,不要跟任何人分享你的雲api密鑰對
api explorer工具是個好東西,填好secretid、secretkey+3個必填參數(填你自己的cdn站點資訊),右邊自動生成程式碼
這裡只是以一個具體介面為例,你也可以選其他介面做實驗
操作過程如下圖
最後一步:
dotnet build
dotnet run
②NuGet方式
mkdir test
cd test
dotnet new console
dotnet add package TencentCloudSDK –version 3.0.45 //這一步自動實現引用,你不用管引用的東西在哪裡,反正這句命令給你處理好了,接下來你只需要關注自己的程式碼了,具體版本號請上Github 程式碼託管地址查看
查看包引用的命令:dotnet list package
刪除包引用的命令:dotnet remove package packagename 例如dotnet remove package TencentCloudSDK
然後vim Program.cs替換Program.cs的程式碼為api explorer里準備好的程式碼
然後dotnet build、dotnet run就可以了
這種方式簡單吧?
四、把終端程式碼變ASP.NET Core Web服務
1、把終端程式碼變ASP.NET Core Web服務的效果圖如下
2、查了很多資料,學到一個非常關鍵的點:–urls="url1;url2;url3;url4"後面再多url我就沒試了,感興趣的可以試試。
默認是監聽到http://localhost:5000和https://localhost:5001,通過–urls=可以修改監聽。
5000埠是http
5001埠是https
3、localhost證書最初是不受信任的,得做下處理:
①運行certmgr.msc打開證書管理器,手動刪掉下圖紅色標記的2個localhost證書,請勿刪除 IIS Express localhost 證書(一共3個,是刪前2個,不是3個都刪
②執行命令重新安裝localhost證書並信任之
dotnet dev-certs https –clean
dotnet dev-certs https –trust
③運行程式碼,在瀏覽器里訪問https://localhost:5001看證書圖標是不是綠的
4、著重講下console程式碼如何變web程式碼
①下載vs2019社區版並安裝成功
②打開vs2019創建WebApplication空白項目,按默認路徑保存即可,項目路徑是C:UsersAdministratorSourceReposWebApplication1WebApplication1.csproj
cd /d "C:UsersAdministratorSourceReposWebApplication1WebApplication1"
③進到項目目錄,用NuGet方式安裝TecentCloud Package
安裝命令:dotnet add package TencentCloudSDK –version 3.0.45
這一步自動實現引用,你不用管引用的東西在哪裡,反正這句命令給你處理好了,接下來你只需要關注自己的程式碼了
此時用notepad++或記事本打開WebApplication1.csproj查看,多了
<ItemGroup>
<PackageReference Include="TencentCloudSDK" Version="3.0.45" />
</ItemGroup>
④不需要改Program.cs,只改Startup.cs
我們再把try…catch…放大分析下
無非就是用相似語句進行功能替換,為了讓終端和網頁端都有調用介面的結果,我沒有注釋綠色划出的兩句,如果不需要終端顯示,綠色那2句可以注釋掉。
5、如果沒用NuGet方式,而是直接下載的壓縮包,那你得在解壓出來的目錄里建一個文件夾WebApplication2,這個文件夾跟TencentCloud目錄同級
cd tencentcloud-sdk-dotnet-master
mkdir WebApplication2
cd WebApplication2
dotnet new web
這樣就形成了這個路徑的文件tencentcloud-sdk-dotnet-masterWebApplication2WebApplication2.csproj
編輯WebApplication2.csproj如下圖
這裡明確說明下,ProjectReference Include是給下載壓縮包、解壓使用的方式用的(包括git clone)
<ItemGroup>
<ProjectReference Include="..TencentCloudTencentCloud.csproj" />
</ItemGroup>
而PackageReference Include是給NuGet方式用的
<ItemGroup>
<PackageReference Include="TencentCloudSDK" Version="3.0.45" />
</ItemGroup>
.csproj文件里PackageReference Include和ProjectReference Include只能二選一。