推荐股票的好网站,私域流量管理工具,网站建站查询,网站容易被百度收录云厂商#xff08;腾讯云、Azure等#xff09;提供了Serverless服务#xff0c;借助于Serverless#xff0c;开发人员可以更加专注于代码的开发#xff0c;减少运维的成本。腾讯云的函数计算提供了很多运行库#xff0c;对.NET的支持需要通过custom runtime 来支持#… 云厂商腾讯云、Azure等提供了Serverless服务借助于Serverless开发人员可以更加专注于代码的开发减少运维的成本。腾讯云的函数计算提供了很多运行库对.NET的支持需要通过custom runtime 来支持可以支持任何版本的.NET Core也就是需要自定义runtime需要使用到函数计算的custom runtime功能,具体参见https://cloud.tencent.com/document/product/583/47274。本文主要介绍一下使用ASP.NET CORE 3.1部署在腾讯云Serverless函数计算的内容。C#语言由于需要编译后才可以在 CoreCLR 虚拟机中运行。因此在 SCF 中的使用方式和 Python、Node.js 这类脚本型语言不同和Java一样有如下限制不支持上传代码使用 C# 语言仅支持上传已经开发完成编译打包后的 zip 包。SCF 环境不提供 C# 的编译能力。不支持在线编辑不能上传代码所以不支持在线编辑代码。CoreCLR 运行时的函数在代码页面仅能看到再次通过页面上传或 COS 提交代码的方法。自定义.NET Custom runtimeCustom Runtime的封装工作就是要把各种trigger 的事件封装一个.NET Standard库开发云函数。自 .NET Core 2.0 开始 提供了名为 IHostedService 的新接口有助于轻松实现托管服务文章《ASP.NET Core 3.x控制IHostedService启动顺序浅探》有深入的实现分析基于IHostedService 实现一个SCFHostService这里我们把SCF的Custom Runtime 抽象到ISCFHost 中在SCFHost 类中完成Custom Runtime的业务处理接收来自SCF 的事件转发给函数进行处理函数处理的接口 IFunctionInvoker默认实现了FunctionInvoker 把请求信息 返回给 SCFresponseBody 代表了SCF函数的不同Trigger事件信息我们可以根据不同的Trigger 定义不同的处理函数例如我们处理HttpTrigger的函数为HttpFunctionInvoker上面我们已经完成了最小的MVP封装利用.NET Core的依赖注入容器封装起来我们定义了一个ISCFBuilder 来组装函数的配置和服务SCF 云函数开发我们使用.NET Core的控制台程序来开发云函数创建一个控制台程序, 引用Yhd.TencentCloud.SCF 包把Program.cs 替换成类似代码using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;using System.Threading.Tasks;using Yhd.FindJob;using Yhd.TencentCloud.SCF.Executors;public class Index{ static async Task Main(string[] args) { var builder new HostBuilder() .ConfigureSCF((context, scfbuilder) { var configuration scfbuilder.Configuration; scfbuilder.Services.AddFindJob(configuration); scfbuilder.Services.AddEasyCaching(options { options.UseInMemory(); //use redis cache that named redis options.UseRedis(configuration) .WithJson() ; }); scfbuilder.Services.AddTransientIFunctionInvoker, JobsHttpFunctionInvoker(); }) .UseConsoleLifetime(); var host builder.Build(); using (host) { await host.RunAsync(); } }}通过ConfigureSCF 可以添加函数的依赖服务例如上面例子中的EasyCaching 以及函数的服务 关键的一句是 scfbuilder.Services.AddTransientIFunctionInvoker, JobsHttpFunctionInvoker(); 把函数的处理逻辑使用JobsHttpFunctionInvoker 进行注入。把函数的配置放到appsettings.json。现在SCF 云函数有个问题是本地Windows开发问题本地的函数逻辑的测试可以通过单元测试进行。还有函数打包必须在Linux环境下进行。 云函数部署创建 bootstrap 文件bootstrap 是运行时入口引导程序文件Custom Runtime 加载函数时固定检索 bootstrap 同名文件并执行该程序来启动 Custom Runtime 运行时。Custom Runtime 支持任意语言及版本开发运行函数主要基于 bootstrap 引导程序由开发者自定义实现。其中bootstrap 需具备以下条件需具有可执行权限。能够在 SCF 系统环境CentOS 7.6中运行。下面这个是 .NET Core 3.1的云函数 bootstrap 文件#!/bin/shecho Start dotnet bootstrap ~~~export DOTNET_ROOT/opt/rtexport PATH$(pwd):/opt/rt:${PATH}dotnet ./index/bin/Release/netcoreapp3.1/index.dllindex.dll 就是我们开发的函数文件。成功创建 bootstrap 和 函数文件 后目录结构如下所示├ bootstrap└ index需要在Linux 下执行以下命令设置文件可执行权限并将其添加至 ZIP 包 部署包准备好后可以通过 云函数控制台 来创建和发布函数 基于腾讯云 CustomRuntime的.NET 封装的开发SDK 后续会开源欢迎你的持续关注。