Rom*_*ews 3 amazon-web-services amazon-dynamodb .net-core aws-xray
我已经在我的开发计算机中创建了一个 DynamoDb 表,并且尝试使用对象CreateBatchWrite<T>方法从我的 .NET Core 应用程序插入几行DynamoDBContext。我可以从 localhost:8000/shell url 从 DynamoDB Javascript Shell 窗口查询表,它返回的行数为 0。但是当尝试调用该CreateBatchWrite<T>方法时,我收到错误“ Entity does not believe in AsyncLocal ” 。
小智 5
在执行任何 DynamoDB API 方法之前添加此行:
AWSXRayRecorder.Instance.ContextMissingStrategy = ContextMissingStrategy.LOG_ERROR;
Run Code Online (Sandbox Code Playgroud)
您可以在 GitHub 讨论中找到更多信息https://github.com/aws/aws-xray-sdk-dotnet/issues/69#issuecomment-482688754
此外,您还需要导入这两个包。
using Amazon.XRay.Recorder.Core;
using Amazon.XRay.Recorder.Core.Strategies;
Run Code Online (Sandbox Code Playgroud)
使用 X-Ray 时,当尝试创建没有Parent Segment 的SubSegment时,就会发生这种情况。根据您的设置,当您运行查询时,它可能会尝试创建子段,但由于没有父段而失败。
在本地运行 Lambda 函数时,这种情况很常见,因为模拟 Lambda 测试工具不会像 AWS 上的实际 Lambda 环境那样为您创建段。这也可能发生在其他场景中。
更多详细信息请参见:https ://github.com/aws/aws-xray-sdk-dotnet/issues/125
解决此问题的最简单方法是在本地禁用 X-Ray(因为您可能不想在本地生成跟踪):
添加appsettings.Development.json以下内容:
"XRay": {
"DisableXRayTracing": "true",
"UseRuntimeErrors": "false",
"CollectSqlQueries": "false"
}
Run Code Online (Sandbox Code Playgroud)
重要的是DisableXRayTracingequals true 。
确保在属性窗口中将其appsettings.Development.json设置为“始终复制” 。您可以通过将其包含在您的.csproj:
<ItemGroup>
<None Update="appsettings.Development.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
如果您确实想在本地跟踪事物,请确保仅在本地运行时创建父段(在 AWS 上,这会导致问题,因为您将有两个父段,一个由您手动创建,另一个由 AWS 创建)。
| 归档时间: |
|
| 查看次数: |
3958 次 |
| 最近记录: |