j9九游会登录/ 函数工作流 functiongraph/ 开发指南/ / / 使用ide开发c#事件函数
更新时间:2025-09-17 gmt 08:00

使用ide开发c#事件函数-j9九游会登录

本章节介绍使用ide工具开发c#事件函数的流程。关于c#函数接口定义、initializer入口介绍以及sdk接口说明请参考c#函数开发概述

约束与限制

通过apig服务调用函数服务时,isbase64encoded的值默认为true,表示apig传递给functiongraph的请求体body已经进行base64编码,需要先对body内容base64解码后再处理。

函数必须按以下结构返回字符串。
{
    "isbase64encoded": true|false,
    "statuscode": httpstatuscode,
    "headers": {"headername":"headervalue",...},
    "body": "..."
}

查看dotnet版本信息

输入以下命令查看已安装的.net版本信息。

dotnet --info
图1 查看dotnet版本信息

步骤一:创建工程

  1. 打开ide,如图2所示创建c#编译工程,框架选择“net6.0”
    图2 创建工程
  2. 工程新建完成后,目录结构如所示。
    图3 工程目录结构
  3. 下载functiongraph函数的,如图4所示将dll文件解压到该目录。
    图4 dll文件解压到目录
  4. 编辑项目中的“consoleapp1.csproj”文件,使该项目能够引用下载的dll文件,文件内容新增如下:
    
        
            ../hc.serverless.function.common.dll
        
    

    编辑完成后cspoj文件内容如图5所示。

    图5 csproj文件
  5. 编辑项目中的“program.cs”文件,使用如下代码直接替换文件中原有的代码:
    using hc.serverless.function.common;
    using system;
    using system.io;
    using system.text;
    namespace src
    {
        class program
        {
            static void main(string[] args)
            {
                console.writeline("hello world!");
            }
            public stream myfunc(stream input,ifunctioncontext context)
            {
                string payload = "";
                if (input != null && input.length > 0)
                {
                    byte[] buffer = new byte[input.length];
                    input.read(buffer, 0, (int)(input.length));
                    payload = encoding.utf8.getstring(buffer);
                }
                var ms = new memorystream();
                using (var sw = new streamwriter(ms))
                {
                    sw.writeline("csharp runtime test(v1.0.2)");
                    sw.writeline("=====================================");
                    sw.writeline("request id:       {0}", context.requestid);
                    sw.writeline("function name:    {0}", context.functionname);
                    sw.writeline("function version: {0}", context.functionversion);
                    sw.writeline("project:          {0}", context.projectid);
                    sw.writeline("package:          {0}", context.packagename);
                    sw.writeline("security access key:       {0}", context.securityaccesskey);
                    sw.writeline("security secret key:       {0}", context.securitysecretkey);
                    sw.writeline("security token:            {0}", context.securitytoken);
                    sw.writeline("token:            {0}", context.token);
                    sw.writeline("user data(ud-a):  {0}", context.getuserdata("ud-a"));
                    sw.writeline("user data(ud-notexist): {0}", context.getuserdata("ud-notexist", ""));
                    sw.writeline("user data(ud-notexist-default): {0}", context.getuserdata("ud-notexist", "default value"));
                    sw.writeline("=====================================");
                    var logger = context.logger;
                    logger.logf("hello csharp runtime test(v1.0.2)");
                    sw.writeline(payload);
                }
                return new memorystream(ms.toarray());
            }
        }
    }
  6. 图6所示,使用ide的“编译”按钮编译c#工程。
    图6 编译c#按钮
  7. 图7所示将“consoleapp1\bin\debug\net6.0”路径下编译好的所有文件打包为zip格式文件。请注意不要将整个文件夹进行打包,需确保压缩包解压后直接出现文件。
    图7 打包编译文件

步骤二:测试函数

  1. 登录,右上角单击“创建函数”
  2. 图8所示,创建一个空白的c#事件函数,单击“立即创建”进入函数详情页。
    图8 创建函数
  3. 上传7打包的zip文件,如图9所示,代码包上传后将在functiongraph控制台自动部署。
    图9 上传代码
  4. 图10所示,选择“设置 > 常规设置”,将函数执行入口配置为"consoleapp1::src.program::myfunc",单击“保存”

    样例工程包中的c#工程编译后生成的文件为consoleapp1.dll,因此函数执行入口中的程序集名为consoleapp1。

    图10 配置函数执行入口
  5. 回到“代码”页签,单击“测试”配置一个空白测试事件。
  6. 图11所示,选择已创建的空白测试事件,单击“测试”,查看函数执行结果。
    图11 测试函数

执行结果

执行结果由3部分组成:函数返回、执行摘要和日志。

表1 执行结果说明

参数项

执行成功

执行失败

函数返回

返回函数中定义的返回信息。

返回包含错误信息和错误类型的json文件。格式如下:

{
    "errormessage": "",
    "errortype": ""
}

errormessage:runtime返回的错误信息

errortype:错误类型

执行摘要

显示请求id、配置内存、执行时长、实际使用内存和收费时长。

显示请求id、配置内存、执行时长、实际使用内存和收费时长。

日志

打印函数日志,最多显示4kb的日志。

打印报错信息,最多显示4kb的日志。

相关文档

网站地图