日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在腾讯云云函数计算上部署.NET Core 3.1

發布時間:2023/12/4 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在腾讯云云函数计算上部署.NET Core 3.1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

云廠商(騰訊云、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 runtime

Custom 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 把請求信息 返回給 SCF:

responseBody 代表了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.AddTransient<IFunctionInvoker, JobsHttpFunctionInvoker>();
???????????????
???????????? })
???????????? .UseConsoleLifetime();


???????? var host = builder.Build();

??????? using (host)
???????? {
???????????? await host.RunAsync();
???????? }

??? }
}

通過ConfigureSCF 可以添加函數的依賴服務,例如上面例子中的EasyCaching 以及函數的服務, 關鍵的一句是? scfbuilder.Services.AddTransient<IFunctionInvoker, 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/sh
echo "Start dotnet bootstrap ~~~"
export DOTNET_ROOT=/opt/rt
export PATH=$(pwd):/opt/rt:${PATH}
dotnet ./index/bin/Release/netcoreapp3.1/index.dll

index.dll 就是我們開發的函數文件。

成功創建 bootstrap 和?函數文件?后,目錄結構如下所示:

├ bootstrap
└ index

需要在Linux 下執行以下命令,設置文件可執行權限,并將其添加至 ZIP 包?

部署包準備好后,可以通過?云函數控制臺?來創建和發布函數?

基于騰訊云 CustomRuntime的.NET 封裝的開發SDK 后續會開源,歡迎你的持續關注。

總結

以上是生活随笔為你收集整理的在腾讯云云函数计算上部署.NET Core 3.1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。