You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6控制台调用AWSSDK.Lambda无响应,同代码在.NET Framework正常

问题描述

我用以下代码开发了.NET 6控制台应用:

var options = new AmazonLambdaConfig
{
    RegionEndpoint = Amazon.RegionEndpoint.EUCentral1,
    Timeout = TimeSpan.FromMilliseconds(1000),
};

var client = new Amazon.Lambda.AmazonLambdaClient("KEY", "SECRET", options);

client.ExceptionEvent += Client_ExceptionEvent;
client.AfterResponseEvent += Client_AfterResponseEvent;
client.BeforeRequestEvent += Client_BeforeRequestEvent;
string _awsResult = string.Empty;
Console.WriteLine("2");


var payload = System.Text.Json.JsonSerializer.Serialize(new
{
    client = "CLIENT",// client
    version = "2.0",
    action = "getData",
    serialNumber = System.Convert.ToBase64String("00-0A-40-97-0D-17".HexStringToHex()),// serial
});
Console.WriteLine("3");

var response = await client.InvokeAsync(new Amazon.Lambda.Model.InvokeRequest
{
    FunctionName = "FUNCTIONNAME-XYZ",
    Payload = payload,
});

该代码在5台生产机器和2台开发机器上运行正常,但在某一台机器上调用InvokeAsync后无响应。将相同代码、相同NuGet包(AWSSDK.Core 3.7.204、AWSSDK.Lambda 3.7.201.49)移植到.NET Framework4.7.2项目中可正常运行,且该机器已安装.NET6桌面运行时。

更新:我创建了.NET6和.NET Framework4.7.2两个测试项目,可见.NET6版本无法正常运行;使用CLI测试调用Lambda函数则成功,现求助排查问题原因。

排查建议
  • 检查异步代码阻塞问题:控制台应用中如果Main方法不是异步的,直接使用Wait()或Result可能导致死锁。确认你的Main方法是否标记为async Task,如果是同步Main,尝试替换为异步入口:
    public static async Task Main(string[] args)
    {
        // 你的代码逻辑
    }
    
  • 捕获并输出详细异常:当前代码订阅了ExceptionEvent,但未展示具体实现,确保该事件处理方法中打印完整异常信息(包括堆栈跟踪):
    private static void Client_ExceptionEvent(object sender, ExceptionEventArgs e)
    {
        Console.WriteLine($"异常信息: {e.Exception.Message}");
        Console.WriteLine($"堆栈跟踪: {e.Exception.StackTrace}");
    }
    
  • 检查.NET 6运行时环境差异:
    • 确认该机器安装的.NET 6运行时是最新补丁版本,部分旧版本可能存在HttpClient或AWS SDK兼容性问题。
    • 对比正常机器和异常机器的.NET 6运行时版本(使用dotnet --info命令查看)。
  • 检查网络代理设置:.NET Core/.NET 6和.NET Framework的代理配置逻辑不同,即使系统代理相同,SDK可能读取方式有差异。尝试在代码中显式禁用代理:
    var options = new AmazonLambdaConfig
    {
        RegionEndpoint = Amazon.RegionEndpoint.EUCentral1,
        Timeout = TimeSpan.FromMilliseconds(1000),
        ProxyHost = null,
        ProxyPort = -1
    };
    
  • 启用AWS SDK日志:开启详细日志排查请求过程,添加日志配置:
    Amazon.AWSConfigs.LoggingConfig.LogTo = Amazon.LoggingOptions.Console;
    Amazon.AWSConfigs.LoggingConfig.LogLevel = Amazon.LogLevel.Debug;
    
  • 检查TLS版本兼容性:.NET 6默认使用TLS 1.3,而部分环境可能只支持TLS 1.2,尝试强制指定TLS版本:
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
    
  • 验证凭证加载方式:避免硬编码密钥,尝试使用AWS凭证链(环境变量、凭证文件、IAM角色)测试,确认是否是凭证加载逻辑在.NET 6下的差异。

内容的提问来源于stack exchange,提问作者David Stania

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:03:17