专栏首页CVM技术交流以1个具体接口为例来展示腾讯云.NET SDK的使用
原创

以1个具体接口为例来展示腾讯云.NET SDK的使用

一、做足准备

【.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项目,所以你去看TecentCloudExamples\TecentCloudExamples.csproj的内容如下,中间那段就是引用,用的是2个..代表上层目录,上层目录里的TecentCloud项目

上图3小段,第1段是必须的,需要根据实际情况写版本号,第2段是git clone方式或直接下载压缩包、解压使用的方式的TencentCloud项目引用,第3段是NuGet方式获取引用,是第1段+第2段还是第1段+第3段请根据实际情况来,我们压缩包里TecentCloudExamples\TecentCloudExamples.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="..\TencentCloud\TencentCloud.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="..\TencentCloud\TencentCloud.csproj" />

  </ItemGroup>

然后vim Program.cs替换Program.cs的代码为api explorer里准备好的代码

https://console.cloud.tencent.com/api/explorer?Product=cdn&Version=2018-06-06&Action=DescribeCdnDomainLogs

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证书最初是不受信任的,得做下处理:

参考:https://docs.microsoft.com/zh-cn/aspnet/core/security/enforcing-ssl?view=aspnetcore-3.1&tabs=visual-studio#trust

①运行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:\Users\Administrator\Source\Repos\WebApplication1\WebApplication1.csproj

cd /d "C:\Users\Administrator\Source\Repos\WebApplication1\WebApplication1"

③进到项目目录,用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-master\WebApplication2\WebApplication2.csproj

编辑WebApplication2.csproj如下图

这里明确说明下,ProjectReference Include是给下载压缩包、解压使用的方式用的(包括git clone)

  <ItemGroup>

    <ProjectReference Include="..\TencentCloud\TencentCloud.csproj" />

  </ItemGroup>

而PackageReference Include是给NuGet方式用的

  <ItemGroup>

    <PackageReference Include="TencentCloudSDK" Version="3.0.45" />

  </ItemGroup>

.csproj文件里PackageReference Include和ProjectReference Include只能二选一。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用 WimBuilder2 最新稳定版 DIY Win10PE

    WimBuilder2后来者居上,支持制作Win10 RS5(1809)、19H1(1904)、19H2(1909)、20H1最新版的x86、x64 PE,我个...

    我爱你的一诺
  • Windows 邮箱服务器 WinWebMail Server 配置过程

    配置邮箱服务器之前需要解封25端口,只支持包年包月机器,不支持按量机器https://console.cloud.tencent.com/secctrl/smt...

    我爱你的一诺
  • 能显示Windows系统信息的一些命令

    wmic os get caption,version,buildnumber /format:list

    我爱你的一诺
  • docker源码分析(3)---镜像 (2)

    第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

    月牙寂道长
  • 逻辑回归

    iOSDevLog
  • Kangle部署多节点CDN

    CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容...

    flyxber
  • Scala中的语言特性是如何实现的?

    image.png #思特沃克好声音# (图片:网络) 我们学东西不止要知其然,还要知其所以然。成都办公室的崔鹏飞在学Scala的时候,不止学习如何使用Scal...

    ThoughtWorks
  • NodeJS基础知识

    console.time方法用于标记开始时间与console.timeEnd方法用于标记结束时间。

    达达前端
  • [ASP.NET Core 3.1] 发布Linux+[Supervisord]监控服务运行

    Centos7.x 安装 Supervisord 使用supervisor管理进程

    小狐狸
  • 【腾讯云】云镜-主机安全防护解决方案

    主机安全,其核心内容包括安全应用交付系统、应用监管系统、操作系统安全增强系统和运维安全管控系统。它的具体功能是指保证主机在数据存储和处理的保密性、完整性,可用性...

    云加社区

扫码关注云+社区

领取腾讯云代金券