更新时间: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版本信息
步骤一:创建工程
- 打开ide,如图2所示创建c#编译工程,框架选择“net6.0”。
图2 创建工程
- 工程新建完成后,目录结构如所示。
图3 工程目录结构
- 下载functiongraph函数的,如图4所示将dll文件解压到该目录。
图4 dll文件解压到目录
- 编辑项目中的“consoleapp1.csproj”文件,使该项目能够引用下载的dll文件,文件内容新增如下:
../hc.serverless.function.common.dll 编辑完成后cspoj文件内容如图5所示。
图5 csproj文件
- 编辑项目中的“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所示,使用ide的“编译”按钮编译c#工程。
图6 编译c#按钮
- 如图7所示将“consoleapp1\bin\debug\net6.0”路径下编译好的所有文件打包为zip格式文件。请注意不要将整个文件夹进行打包,需确保压缩包解压后直接出现文件。
图7 打包编译文件
步骤二:测试函数
- 登录,右上角单击“创建函数”。
- 如图8所示,创建一个空白的c#事件函数,单击“立即创建”进入函数详情页。
图8 创建函数
- 上传7打包的zip文件,如图9所示,代码包上传后将在functiongraph控制台自动部署。
图9 上传代码
- 如图10所示,选择“设置 > 常规设置”,将函数执行入口配置为"consoleapp1::src.program::myfunc",单击“保存”。
样例工程包中的c#工程编译后生成的文件为consoleapp1.dll,因此函数执行入口中的程序集名为consoleapp1。
图10 配置函数执行入口
- 回到“代码”页签,单击“测试”配置一个空白测试事件。
- 如图11所示,选择已创建的空白测试事件,单击“测试”,查看函数执行结果。
图11 测试函数
执行结果
执行结果由3部分组成:函数返回、执行摘要和日志。
|
参数项 |
执行成功 |
执行失败 |
|---|---|---|
|
函数返回 |
返回函数中定义的返回信息。 |
返回包含错误信息和错误类型的json文件。格式如下: {
"errormessage": "",
"errortype": ""
}
errormessage:runtime返回的错误信息 errortype:错误类型 |
|
执行摘要 |
显示请求id、配置内存、执行时长、实际使用内存和收费时长。 |
显示请求id、配置内存、执行时长、实际使用内存和收费时长。 |
|
日志 |
打印函数日志,最多显示4kb的日志。 |
打印报错信息,最多显示4kb的日志。 |
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨