C#
所有文档

          函数计算 CFC

          C#

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

          函数入口

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

          namespace BaiduBce.CFC.Core {
              public interface StreamHandler {
                  void Handler(Stream input, Stream output, InvokeContext context);
              }
          }

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

          函数代码示例

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

          StreamHandler.cs

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

          using System;
          using System.IO;
          using Newtonsoft.Json;
          using BaiduBce.CFC.Core;
          
          namespace BaiduBce.CFC.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.CFC.Demo {
              public class InvokeEvent {
                  [JsonProperty(PropertyName = "event")]
                  public string Event { get; set; }        
              }
          }

          Program.cs

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

          using BaiduBce.CFC.Core;
          namespace BaiduBce.CFC.Demo {
              class MainClass {
                  public static void Main(string[] args) {
                      CfcClient.main();
                  }
              }
          }

          函数打包及上传

          函数打包

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

          $ dotnet publish -c Release

          打包输出结果:

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

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

          Handler 命名

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

          在上述简单示例中,如果 Assembly 文件名为 csharp_demo,则 handler 字符串为 csharp_demo::BaiduBce.CFC.Demo.StreamHandlerDemo。

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

          上一篇
          Java
          下一篇
          Python