AWS .NET SDK DynamoDB LoadAsync返回“无法加载类型”错误

时间:2018-07-12 23:48:37

标签: c# amazon-web-services aws-lambda amazon-dynamodb

我正在使用AWS Lambda和DynamoDB开发应用程序。尝试测试lambda函数时出现以下错误。

错误:

  

{     “ errorType”:“ AggregateException”,     “ errorMessage”:“发生一个或多个错误。(无法从程序集'AWSSDK.Core,版本= 3.3.0.0,文化=中性,PublicKeyToken = 885c28607f98e604'中加载类型'Amazon.Runtime.Internal.AsyncRunner'。)”,     “堆栈跟踪”: [       “在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)”,       “在System.Threading.Tasks.Task.Wait(Int32毫秒超时,CancellationToken cancelledToken)”,       “在ProChiller.SyncDevices.QueryDevices(设备输入)”,       “在lambda_method(Closure,Stream,Stream,ContextInfo)”     ],     “原因”:{       “ errorType”:“ TypeLoadException”,       “ errorMessage”:“无法从程序集” AWSSDK.Core,Version = 3.3.0.0,Culture = neutral,PublicKeyToken = 885c28607f98e604“中加载类型'Amazon.Runtime.Internal.AsyncRunner'。”,       “堆栈跟踪”: [         “在Amazon.DynamoDBv2.DataModel.DynamoDBContext.LoadAsync [T](Object hashKey,CancellationToken cancelleToken)上”,         “在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的版本,以查看它的新版本和我的代码是否有问题。但是,无论我回滚到哪个版本,我仍然会遇到相同的错误。

我已经四处搜寻,希望有人对此类型加载有类似的问题,但是我可以找到有人写过关于此特定错误的文章,或者可以推论出的类似文章。我希望可能有针对该类型的特定SDK版本的文档,但找不到任何内容。

我发布的代码实际上是一个配对版本,在其中我尝试使其尽可能简单,以希望我正在做的其他事情导致此错误。

其他内部版本信息:

该应用程序是.Net Core 1.0。

AWSSDK.Core版本为3.3.24.3,但我确实注意到错误中的内容是“ version = 3.3.0.0”。

问题:

有人知道造成此类型加载错误的原因吗?我应该回滚到特定版本的SDK来解决此问题吗?还是我叫错了树?

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

简短的回答是,我认为您需要更新到更高版本的AWSSDK.DynamoDBv2。

我们有一个拉取请求,从AWSSDK.DynamoDBv2所需的AWSSDK.Core中删除了对AsyncRunner的需求,因此将其删除。事后发现您的问题不是正确的决定。如果同时更新AWSSDK.Core和AWSSDK.DynamoDBv2软件包,则可以,但在这种情况下,您仅更新了AWSSDK.Core,但旧版本的AWSSDK.DynamoDBv2仍从AWSSDK.Core引用AsyncRunner。

我将与团队讨论,并了解有关在这种情况下添加AsyncRunner的信息。