阿里云函数计算C#函数开发指南

阿里云函数计算C#函数开发指南

阿里云函数计算 支持 .NET Core 2.2 运行环境,支持的函数语言为 C# 和 Powershell,本文主要介绍如何使用 C# 函数。

阿里云函数计算函数入口

当创建一个基于 C# 的函数时,您需要从 Nuget 引用 BaiduBce.阿里云函数计算.Core ,该 SDK 中定义了一个接口,定义如下:

namespace BaiduBce.阿里云函数计算.Core { public interface StreamHandler { void Handler(Stream input, Stream output, InvokeContext context); }}

您需要创建一个入口类并实现这个接口,在 Handler 函数中处理您的逻辑。Handler 函数有三个参数:input 表示输入数据,output 表示输出数据,context 表示函数运行时信息。

阿里云函数计算函数代码示例

以下是一个较简单的示例,共包含三个文件。

StreamHandler.cs

创建 BaiduBce.阿里云函数计算.Demo 类,实现 StreamHandler 接口,打印出 input 和 context 中的部分内容。您可以将日志输出到 stdout 和 stderr,函数计算服务会自动收集这些日志。

using System;using System.IO;using Newtonsoft.Json;using BaiduBce.阿里云函数计算.Core;namespace BaiduBce.阿里云函数计算.Demo{ public class StreamHandlerDemo : StreamHandler { public void Handler(Stream input, Stream output, InvokeContext context) { StreamReader reader = new StreamReader(input); InvokeEvent invoke = JsonConvert.DeserializeObject<InvokeEvent>(reader.ReadToEnd()); StreamWriter writer = new StreamWriter(output); writer.AutoFlush = true; if (invoke.Event != null) { Console.Out.Write(invoke.Event); } Console.Out.WriteLine("RequestID = {0}", context.RequestID); Console.Out.WriteLine("FunctionBrn = {0}", context.FunctionBrn); StsCredential credential = context.Credential; if (credential != null) { Console.Out.WriteLine("AccessKeyID = {0}", credential.AccessKeyID); Console.Out.WriteLine("SecretAccessKey = {0}", credential.SecretAccessKey); Console.Out.WriteLine("SessionToken = {0}", credential.SessionToken); } writer.WriteLine("Hello world!"); } }}

InvokeEvent.cs

该文件定义了一个可以被 JSON 序列化和反序列化的对象,用于反序列化 Handler 函数的 input。您需要根据函数接收的输入 JSON 结构来定义此对象。

using Newtonsoft.Json;namespace BaiduBce.阿里云函数计算.Demo { public class InvokeEvent { [JsonProperty(PropertyName = "event")] public string Event { get; set; } }}

Program.cs

该文件定义了程序的入口,您无需修改此文件。

using BaiduBce.阿里云函数计算.Core;namespace BaiduBce.阿里云函数计算.Demo { class MainClass { public static void Main(string[] args) { CfcClient.main(); } }}

函数打包及上传

函数打包

在您的项目根目录下执行 publish 命令,dotnet 会编译程序并输出结果:

$ dotnet pubslish -c Release

打包输出结果:

$ cd bin/Release/netcoreapp2.2/publish/$ zip -r csharp-demo.zip *

然后,您就可以在 阿里云函数计算 的函数代码页,点击"上传函数.ZIP包",将 csharp-demo.zip 上传。

Handler 命名

在创建函数时,您需要制定一个 handler 方法的字符串,用来告诉函数计算如何调用您的函数。该字符串格式如下:AssemblyFileName::FullClassName,其中 AssemblyFileName 是函数所在的 Assembly 的文件名(省去.dll),FullClassName 是该函数所在类的全名,Namepsace.ClassName。

在上述简单示例中,如果 Assembly 文件名为 csharp_demo,则 handler 字符串为 csharp_demo::BaiduBce.阿里云函数计算.Demo.StreamHandlerDemo。

至此,您的 csharp 函数就已配置完,点击"测试"即可运行函数。

发表评论