C# 从C中的另一个Lambda函数调用aws Lambda函数#

C# 从C中的另一个Lambda函数调用aws Lambda函数#,c#,.net,asp.net-mvc,aws-lambda,C#,.net,Asp.net Mvc,Aws Lambda,我不熟悉带c#的aws lambda函数。我有两个lambda函数,我想从第二个函数调用一个lambda函数,我使用的代码如下: public string Function1(JObject input) { string param = input["param"].ToString(); string param1 = input["param1"].ToString(); return param.ToUpper()+" "+param1.ToUpper(); }

我不熟悉带c#的aws lambda函数。我有两个lambda函数,我想从第二个函数调用一个lambda函数,我使用的代码如下:

public string Function1(JObject input)
{
    string param = input["param"].ToString();
    string param1 = input["param1"].ToString();
    return param.ToUpper()+" "+param1.ToUpper();
}


public string Function2()
{
    try
    {
        using (AmazonLambdaClient client = new AmazonLambdaClient(some region))
        {
            JObject ob = new JObject();
            ob.Add("param", "hello");
            ob.Add("param1", "Lambda");
            var request = new InvokeRequest
            {
                FunctionName = "Function1",
                Payload = ob.ToString()
            };
            var response = client.Invoke(request);
            string result;
            using (var sr = new StreamReader(response.Payload))
            {
                return result = sr.ReadToEnd();
            }
        }
    }
    catch (Exception ex) 
    {
        return ex.Message.ToString();
    }
}
我得到一个错误,如下所示:

public string Function1(JObject input)
{
    string param = input["param"].ToString();
    string param1 = input["param1"].ToString();
    return param.ToUpper()+" "+param1.ToUpper();
}


public string Function2()
{
    try
    {
        using (AmazonLambdaClient client = new AmazonLambdaClient(some region))
        {
            JObject ob = new JObject();
            ob.Add("param", "hello");
            ob.Add("param1", "Lambda");
            var request = new InvokeRequest
            {
                FunctionName = "Function1",
                Payload = ob.ToString()
            };
            var response = client.Invoke(request);
            string result;
            using (var sr = new StreamReader(response.Payload))
            {
                return result = sr.ReadToEnd();
            }
        }
    }
    catch (Exception ex) 
    {
        return ex.Message.ToString();
    }
}
{ “errorType”:“TypeLoadException”, “errorMessage:“无法从程序集”系统加载类型“System.Net.HttpStatusCode”,版本=2.0.5.0,区域性=中性,PublicKeyToken=7cec85d7bea7798e,可重定目标=是”。”, “stackTrace”:[ “在AWSLambdaApp.Function.Function2()”, 在lambda_方法(闭包、流、流、上下文信息) ] }

在function 2应用程序中,我添加了“AWSSDK.Core”和“AWSSDK.Lambda”DLL的引用。
有人能告诉我我做错了什么吗?

我的电脑上没有安装“netcoreapp1.0”。因此我尝试了“netcoreapp2.0”

我的代码如下所示:

public string FunctionHandler(JObject input, ILambdaContext context)
{
    param = input["param"].Value<string>();
    param1 = input["param1"].Value<string>();
    param.ToUpper() + " " + param1.ToUpper();
}
公共字符串函数处理程序(JObject输入,ILambdaContext上下文)
{
param=输入[“param”].Value();
param1=输入[“param1”].Value();
param.ToUpper()+“”+param1.ToUpper();
}
对于功能2:

public async Task<string> FunctionHandler(string input, ILambdaContext context)
{
    try
    {
        using (AmazonLambdaClient client = new AmazonLambdaClient(RegionEndpoint.USEast1))
        {
            JObject ob = new JObject { { "param", "hello" }, { "param1", "Lambda" } };

            var request = new InvokeRequest
            {
                FunctionName = "Function1",//Function1:v1 if you use alias
                Payload = ob.ToString()
            };

            var response = await client.InvokeAsync(request);

            using (var sr = new StreamReader(response.Payload))
            {
                return await sr.ReadToEndAsync();
            }
        }
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}
公共异步任务FunctionHandler(字符串输入,ILambdaContext上下文)
{
尝试
{
使用(AmazonLambdClient=new AmazonLambdClient(RegionEndpoint.USEast1))
{
JObject ob=新的JObject{{“param”,“hello”},{“param1”,“Lambda”};
var request=newinvokerequest
{
FunctionName=“Function1”,//如果使用别名,则Function1:v1
有效负载=ob.ToString()
};
var response=wait client.InvokeAsync(请求);
使用(var sr=新的StreamReader(response.Payload))
{
return wait sr.ReadToEndAsync();
}
}
}
捕获(例外情况除外)
{
返回ex.消息;
}
}
执行的结果是“HELLO LAMBDA”

我的代码工作的原因可能是:

  • 如何从Function1中的输入获取参数。很可能是这样
  • 我的异步代码。我无法使用最新SDK调用lambda的同步代码
  • .NETCore的版本

另外,我需要发送一个简单的字符串作为Function2的参数。

我认为您必须重新考虑您的体系结构。请记住,lambda函数有限制(执行时间和CPU使用)

最好在这种情况下使用。在这种情况下,您可以使用责任链模式。Lambda函数将被解耦,并且更容易支持它们。因此,您将有如下结果:


此外,aws step函数具有许多特性,如条件、并行执行、等待等。它为您提供了改进应用程序的强大工具

您使用的是哪个版本的.Net Framework?我使用的是“Framework”:“netcoreapp1.0”,“function runtime”:“dotnetcore1.0”,此外,FunctionName也可以是Lambda别名,如“Function1:v1”,以防有所帮助。