gpt4 book ai didi

c# - 并行进行 http 调用时出现未经授权的响应

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:27 25 4
gpt4 key购买 nike

我有一些代码可以循环访问一些服务并调用这些服务的 api。如果我一次运行这些调用,每次调用都会得到 OK (200) 的响应 StatusCode。如果我将代码更改为并行运行,则第一个调用完成后会得到一个 OK,但其余调用都将完成,并且 StatusCode 值为 Unauthorized (401)。

奇怪的是,所有调用实际上都是在服务器上处理的——即使是我收到未授权响应的调用。我不明白发生了什么。

这是我正在运行的代码。 (并行代码目前已被注释掉)

using (HttpClientHandler handler = new HttpClientHandler())
{
handler.UseDefaultCredentials = true; // Use Windows Credentials
using (var client = new HttpClient(handler))
{
//Some services can run up to 1.5 minutes - need to ensure we don't time out
client.Timeout = new TimeSpan(0, 3, 0);

//Get Available Services
Console.WriteLine("Retrieving service list ...");
var result = await client.GetStringAsync(_baseURL);

var jss = new JavaScriptSerializer();
List<Service> services = new List<Service>();
services = jss.Deserialize<List<Service>>(result);
Console.WriteLine(services.Count.ToString() + " services to run.");

// ** Non Parallel Code **
foreach(var service in services)
{
Console.WriteLine("Running " + service.Name);
var _serviceResponse = await client.PostAsync(_baseURL + "/" + service.Id.ToString() + "/run", null);
Console.WriteLine(service.Name + ": Response = " + _serviceResponse.StatusCode + " " + _serviceResponse.ReasonPhrase);
}

// ** Parallel Code **
//await Task.WhenAll(services.Select(async s => {
// Console.WriteLine("Running " + s.Name);
// var _serviceResponse = await client.PostAsync(_baseURL + "/" + s.Id.ToString() + "/run", null);
// Console.WriteLine(s.Name + ": Response = " + _serviceResponse.StatusCode + " " + _serviceResponse.ReasonPhrase);
//}));
}
}

根据我的阅读,HttpClient 应该能够在使用 Async(我正在做的)时毫无问题地处理同时调用。所以我很好奇为什么这段代码的行为不同。

最佳答案

服务器是否可能对来自同一 IP/用户的客户端请求应用某种速率限制,并在超过最大值时返回 401?

关于c# - 并行进行 http 调用时出现未经授权的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30920953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com