【发布时间】:2018-12-21 06:58:48
【问题描述】:
我正在使用 AWS Lambda 和 DynamoDB 开发应用程序。当我尝试测试我的 lambda 函数时,出现以下错误。
错误:
{ "errorType": "AggregateException", "errorMessage": "发生了一个或多个错误。(无法从程序集 'AWSSDK.Core,Version=3.3.0.0,Culture=neutral,PublicKeyToken=885c28607f98e604' 加载类型 'Amazon.Runtime.Internal.AsyncRunner'。)", “堆栈跟踪”: [ “在 System.Threading.Tasks.Task.ThrowIfExceptional(布尔 includeTaskCanceledExceptions)”, “在 System.Threading.Tasks.Task.Wait(Int32 毫秒超时,CancellationToken cancelToken)”, “在 ProChiller.SyncDevices.QueryDevices(设备输入)”, “在 lambda_method(闭包,流,流,上下文信息)” ], “原因”: { "errorType": "TypeLoadException", "errorMessage": "无法从程序集 'AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604' 中加载类型 'Amazon.Runtime.Internal.AsyncRunner'。", “堆栈跟踪”: [ “在 Amazon.DynamoDBv2.DataModel.DynamoDBContext.LoadAsync[T](对象 hashKey,CancellationToken cancelToken)”, “在 ProChiller.SyncDevices.d__6.MoveNext()” ] } }
如您所见,它似乎无法从 AWSSDK 加载“AsyncRunner”。
代码:
private static AmazonDynamoDBClient amazonDynamoDBClient = new AmazonDynamoDBClient();
public static Devices GetDeviceHandler(Devices input, ILambdaContext context)
{
var task = QueryDevices(input);
task.Wait();
return task.Result;
}
static async Task<Devices> QueryDevices(Devices device)
{
DynamoDBContext dbctx = new DynamoDBContext(amazonDynamoDBClient);
var operation = dbctx.LoadAsync<Devices>(device.TccvID);
Devices devices = await operation;
return devices;
}
我的尝试:
我尝试了多种使用 Dynamo 进行查询的不同方法,但这种方法是最简洁的,通常可以得到我正在寻找的结果。
现在我发誓我以前曾使用过这段代码或非常相似的代码,而我过去曾遇到过 SDK 版本的问题,导致更新时出现问题。我尝试回滚 AWSSDK.Core 的版本,看看它的新版本和我的代码是否有问题。但是,无论我回滚到哪个版本,我仍然会遇到相同的错误。
我四处搜索,希望有人对这种类型的 load 有类似的问题,但我可以找到任何人写过这个特定的错误,或者我可以推断出足够相似的错误。我希望也许有我应该为这种类型运行的特定 SDK 版本的文档,但找不到任何东西。
我发布的代码实际上是一个配对的版本,我试图让它尽可能简单,希望是我正在做的其他事情导致了这个错误。
其他构建信息:
应用程序是 .Net Core 1.0。
AWSSDK.Core 版本是 3.3.24.3,但我确实注意到错误中显示“version=3.3.0.0”。
问题:
有谁知道可能导致这种类型加载错误的原因是什么?是否有我应该回滚到的特定版本的 SDK 来解决这个问题,还是我在找错树?
提前感谢您的帮助!
【问题讨论】:
标签: c# amazon-web-services aws-lambda amazon-dynamodb