HttpClient .net 6 结果在 EKS、Lambda 上运行缓慢。按预期本地工作

问题描述 投票:0回答:1

我尝试访问端点来获取令牌,.net 6 中内置的编排 API 大约需要 15 秒才能返回令牌。为了测试这不是网络问题,我创建了两个 Lambda 函数,一个使用 python,另一个使用 .net 6 C#(与 API 的代码相同)。 python 运行时间不到 1 秒,但 .net 运行时间为 15 秒,下面是代码,我不希望在 Orchestration API 和因此而要调用的任何 API 之间有一个 Lambda python 层问题。抱歉,它很脏,并且不遵循许多标准,因为我一直在尝试一些东西。

 var handler = new HttpClientHandler();
                handler.Proxy = null;
                handler.UseProxy = false;
                handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                handler.ServerCertificateCustomValidationCallback =
                    (httpRequestMessage, cert, cetChain, policyErrors) =>
                    {
                        return true;
                    };
                using (var client = new HttpClient(handler))
                {

                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.ConnectionClose = true;

                    client.BaseAddress = new Uri("https://xxxxxxxxxx/");
                    
                    var data = new List<KeyValuePair<string, string>>();
                    var bodyArray = "grant_type:xxxxx|scope:xxxxx".Split("|");
                    for (int i = 0; i < bodyArray.Length; i += 1)
                    {
                        var bodyKeyValue = bodyArray[i].Split(":");
                        for (int x = 0; x < bodyKeyValue.Length - 1; x += 1)
                        {
                            var key = bodyKeyValue[0].ToString();
                            var value = bodyKeyValue[1].ToString();

                            data.Add(new KeyValuePair<string, string>(key, value));
                        }
                    }
                    var content = new FormUrlEncodedContent(data);

                    var authenticationString = "1c69ec9f138d42bd2735e6c275ec1b77:d172e5f8f2b8c731a6fbfda5e2ad2f09";
                    var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(authenticationString));

                    var requestMessage = new HttpRequestMessage(HttpMethod.Post, @"xxxxxx/token");
                    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Basic", base64EncodedAuthenticationString);
                    requestMessage.Content = content;

                    var task = client.SendAsync(requestMessage);

                    var response = task.Result.Content.ReadAsStringAsync().Result;

                    Token result = JsonConvert.DeserializeObject<Token>(response.ToString());

                    return result;

谢谢

我在本地尝试过,在本地 Docker 上运行得很好,没有速度问题,从生成的 Postman 复制了 RestClient 代码。

amazon-web-services aws-lambda httpclient .net-6.0 amazon-eks
1个回答
0
投票

你对此有答案吗?我认为我在相同的情况下运行 eks 集群下的网络核心 api。

© www.soinside.com 2019 - 2024. All rights reserved.