以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只能二选一。