C#函数开发概述
FunctionGraph目前支持以下C#运行环境。
- C#(.NET Core 2.1)
- C#(.NET Core 3.1)
- C#(.NET Core 6.0)
- C#(.NET Core 8.0)(仅支持“中东-利雅得”、“土耳其-伊斯坦布尔”区域)
C#函数接口定义
C#函数接口定义:作用域 返回参数 函数名(函数参数,Context参数)
- 作用域:提供给FunctionGraph调用的用户函数必须定义为public。
- 返回参数:用户定义,FunctionGraph负责转换为字符串,作为HTTP Response返回。
- 函数名:用户自定义函数名称,需要和函数执行入口处用户自定义的入口函数名称一致。
- 上下文环境(context):Runtime提供的函数执行上下文,相关属性定义在对象说明中。
HC.Serverless.Function.Common –部署在FunctionGraph服务中的项目工程需要引入该库,其中包含IFunctionContext对象,详情见context类说明。
创建csharp函数时,需要定义某个类中的方法作为函数执行入口,该方法可以通过定义IFunctionContext类型的参数来访问当前执行函数的信息。例如:
1 2 3 4
public Stream handlerName(Stream input,IFunctionContext context) { // TODO }
C#函数的函数执行入口参数格式为:[程序集名]::[命名空间].[类名]::[执行函数名],例如CsharpDemo::CsharpDemo.Program::MyFunc,可通过FunctionGraph控制台进入函数详情页的常规设置中进行配置或修改。
函数Handler定义
ASSEMBLY::NAMESPACE.CLASSNAME::METHODNAME
SDK接口
- Context接口
Context类中提供了许多属性供用户使用,如表1所示。
表1 Context对象说明 属性名
属性说明
String RequestId
请求ID。
String ProjectId
Project Id。
String PackageName
函数所在分组名称。
String FunctionName
函数名称。
String FunctionVersion
函数版本。
Int MemoryLimitInMb
分配的内存。
Int CpuNumber
获取函数占用的CPU资源。
String Accesskey
获取用户委托的AccessKey(有效期24小时),使用该方法需要为函数配置委托。
当前函数工作流已停止维护Runtime SDK 中String AccessKey接口,您将无法使用String AccessKey获取临时AK。
String Secretkey
获取用户委托的SecretKey(有效期24小时),使用该方法需要为函数配置委托。
当前函数工作流已停止维护Runtime SDK 中String SecretKey接口,您将无法使用String SecretKey获取临时SK。
String SecurityAccessKey
获取用户委托的SecurityAccessKey(有效期24小时),缓存时间为10分钟,即10分钟内再次获取的返回内容相同,使用该方法需要为函数配置委托。
String SecuritySecretKey
获取用户委托的SecuritySecretKey(有效期24小时),缓存时间为10分钟,即10分钟内再次获取的返回内容相同,使用该方法需要为函数配置委托。
String SecurityToken
获取用户委托的SecurityToken(有效期24小时),缓存时间为10分钟,即10分钟内再次获取的返回内容相同,使用该方法需要为函数配置委托。
String Token
获取用户委托的Token(有效期24小时),使用该方法需要为函数配置委托。
Int RemainingTimeInMilliSeconds
函数剩余运行时间。
String GetUserData(string key,string defvalue=" ")
通过key获取用户通过环境变量传入的值。
- 日志接口
FunctionGraph中C# SDK中接口日志说明如所示。
表2 日志接口说明 方法名
方法说明
Log(string message)
利用context创建logger对象:
var logger = context.Logger;
logger.Log("hello CSharp runtime test(v1.0.2)");
Logf(string format, args ...interface{})
利用context创建logger对象:
var logger = context.Logger;
var version = "v1.0.2"
logger.Logf("hello CSharp runtime test({0})", version);