System.ObjectDisposedException: запрос завершился, а HTTPContext расположен при выполнении запросов TestServer в Task.WhC#

Место общения программистов C#
Ответить
Anonymous
 System.ObjectDisposedException: запрос завершился, а HTTPContext расположен при выполнении запросов TestServer в Task.Wh

Сообщение Anonymous »

Я пытаюсь создать тест, где я могу моделировать несколько пользователей одновременно передавать запросы через мое пользовательское промежуточное программное обеспечение. Я надеялся, что смогу создать несколько одновременных запросов, используя TestServer , если я обернул свои запросы в отдельные задачи и вызовов. В основном это работает, за исключением того, что в моем промежуточном программном обеспечении я делаю вызовы в контекст.

Код: Выделить всё

    fail: [namespace].[mycustommiddleware][0]
Request has finished and HttpContext disposed.
Object name: 'HttpContext'.
System.ObjectDisposedException: Request has finished and HttpContext disposed.
Object name: 'HttpContext'.
at Microsoft.AspNetCore.Http.DefaultHttpContext.ThrowContextDisposed()
at Microsoft.AspNetCore.Http.DefaultHttpContext.get_Features()
at Microsoft.AspNetCore.Authentication.RequestPathBaseCookieBuilder.Build(HttpContext context, DateTimeOffset expiresFrom)
at Microsoft.AspNetCore.Http.CookieBuilder.Build(HttpContext context)
at Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler.BuildCookieOptions()
at Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler.HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties properties)
at Microsoft.AspNetCore.Authentication.AuthenticationService.SignInAsync(HttpContext context, String scheme, ClaimsPrincipal principal, AuthenticationProperties properties)
< /code>
Далее приведен мой код, настраивая задачи и создание запросов.var tasks = Enumerable.Range(1, 50).Select(async i =>
{

var user = userPool[random.Next(userPool.Length)];

using (var client = server.CreateClient())
{

var cookie = CreateCookie(user.Company, user.UserName, dataProtectionProvider);

client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Add("cookie", $"RefreshToken={user.RefreshToken}; Token={user.Token}; Test={cookie}");

var request = new HttpRequestMessage(HttpMethod.Get, "/");
var response = await client.SendAsync(request, HttpCompletionOption.ResponseContentRead);

response.EnsureSuccessStatusCode();

var content = await response.Content.ReadAsStringAsync();

Assert.That(response.IsSuccessStatusCode, $"Failed for {user.UserName}: {content}");

return content;

}

});

await Task.WhenAll(tasks);
Для меня кажется, что httpcontext используется между каждым созданным клиентом, и последующие запросы используют httpcontext , который был расположен в предыдущем запросе. Есть ли что -нибудь, что я могу сделать, чтобы смягчить httpcontext из утилизации между моими запросами? Я чувствую, что есть что -то фундаментальное, что я не понимаю, как я пытаюсь использовать TestServer .

Подробнее здесь: https://stackoverflow.com/questions/797 ... isposed-wh
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»