C# 并发HttpClient调用引发500个内部服务器错误

C# 并发HttpClient调用引发500个内部服务器错误,c#,concurrency,asp.net-web-api2,dotnet-httpclient,refit,C#,Concurrency,Asp.net Web Api2,Dotnet Httpclient,Refit,我正在使用1-2接口,并为Web API请求生成客户端RESTful类 public interface IApiClient<T> where T : new() { [Get("")] Task<IEnumerable<T>> GetInitialOrUpdatedData(string clientId); } 在银河系的某个地方,我有一个存储库,它将以以下方式对所有这些API进行并发调用,请注意,我使用

我正在使用1-2接口,并为Web API请求生成客户端RESTful类

public interface IApiClient<T> where T : new()
    {
        [Get("")]
        Task<IEnumerable<T>> GetInitialOrUpdatedData(string clientId);
    }
在银河系的某个地方,我有一个存储库,它将以以下方式对所有这些API进行并发调用,请注意,我使用它将每次调用限制为5次

private OperationQueue _queue = new OperationQueue(5 /* at a time */);
private const int LowPriority = 1;
private const int NormalPriority = 5;
private const int HighPriority = 10;
方法调用中的任务列表

IEnumerable<Task> tasks = new List<Task>
            {
                _queue.Enqueue(NormalPriority, () => Orders .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => OrderDetails .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => Companies .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => Users .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => Addresses .GetAllAsync(clientId))
        };

        await Task.WhenAll(tasks).ConfigureAwait(false);
当500内部服务器不一致时,要理解它是不可能的,因为我的服务器一个接一个地处理调用,所以我试图理解这是我正在使用的API的客户端问题,还是我的服务器需要特殊配置来处理请求,一次处理5个请求

我正在使用WebAPI2服务器

我还在考虑是否可以在设置中使用不同端点配置的同一个HttpClient实例


非常感谢您的任何想法。

这很可能是并发导致的服务器端问题。可能是数据库死锁。获取错误消息。您可以通过将调试器附加到服务器,或插入Fiddler查看错误消息,或使用HttpClient获取响应文本(错误响应也有文本)来实现这一点。是的,我必须更加关注这一点,该死的截止日期:-)我会在双方都添加日志记录。@GeorgeTaskos你找到问题的答案了吗?@Mark如果我记得清楚的话,那是一个我找不到的服务器问题。这是固定的。
private const string BaseUrlAddress = @"http://yourURL/api";

private HttpClient GetHttpClient(string address)
{
    HttpClient httpClient = new HttpClient(new NativeMessageHandler())
    {
        BaseAddress = new Uri(BaseUrlAddress + address),
        Timeout = TimeSpan.FromMinutes(3)
    };
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    return httpClient;
}
private OperationQueue _queue = new OperationQueue(5 /* at a time */);
private const int LowPriority = 1;
private const int NormalPriority = 5;
private const int HighPriority = 10;
IEnumerable<Task> tasks = new List<Task>
            {
                _queue.Enqueue(NormalPriority, () => Orders .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => OrderDetails .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => Companies .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => Users .GetAllAsync(clientId)),
                _queue.Enqueue(NormalPriority, () => Addresses .GetAllAsync(clientId))
        };

        await Task.WhenAll(tasks).ConfigureAwait(false);
await Orders.GetAllAsync(workerId).ConfigureAwait(false);
await OrderDetails .GetAllAsync(workerId).ConfigureAwait(false);
await Companies .GetAllAsync(workerId).ConfigureAwait(false);
await Users .GetAllAsync(workerId).ConfigureAwait(false);
await Addresses .GetAllAsync(workerId).ConfigureAwait(false);