gpt4 book ai didi

c# - Web Api 2 OWIN Selfhost 处理多个并发请求

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

我有一个使用 OWIN 的自托管 web api,但我似乎很难处理并发连接。当我使用 50 个并发获取事件运行压力测试时,响应时间增加了很多,即使操作非常简单,返回 200 OK 并在 uri 中键入 id。

我的 web api OWIN 和 api Controller 如何根据请求同时运行?

这是我的项目示例:

启动类

public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
try
{
appBuilder.UseWelcomePage("/welcome.html");
appBuilder.UseErrorPage(new ErrorPageOptions
{
ShowExceptionDetails =
#if DEBUG
true
#else
false
#endif
});

Debug.WriteLine($"Setting Web Api Configuration up...");
var apiConfig = ConfigureWebApi();
appBuilder.UseWebApi(new HttpServer(apiConfig));
appBuilder.UseCors(CorsOptions.AllowAll);

Debug.WriteLine($"Completed Web Api configuration.");
}
catch (Exception ex)
{
Debug.WriteLine($"Failed to complete Web Api setup.", ex);
throw;
}
}
}

Controller

public class TestController : ApiController
{
public async Task<IHttpActionResult> Get(int id)
{
return Task<IHttpActionResult>.Factory.StartNew(() => {
try
{
return Ok(id);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message, nameof(Get));
return InternalServerError();
}
});
}
}

我的web api控制台启动:

public static void Open()
{
_webApp = WebApp.Start<Startup>(HostAddress);
Console.WriteLine($"Host open -> {HostAddress}");
}

最佳答案

您所有的 api Controller 方法将同时运行,显然受托管 api 的服务器的能力限制。这是 Web 服务器的功能,无论是 IIS 还是自托管。但是,您可以做一些事情来帮助实现这一目标。

如果您始终保持所有异步,您将看到最佳性能。例如,如果您的 Controller 方法如下所示:

public async Task<IHttpActionResult> Get(int id)
{
var testObject = await _repository.GetAsync(id);

return Ok(testObject);
}

并且您有一个如下所示的存储库方法:

public async Task<TestObject> GetAsync(int id)
{
using(var connection = new SqlConnection(_connectionString)
{
// using Dapper
return await connection.QuerySingleAsync<TestObject>("sp_GetTestObject", new {Id = id}, commandType = CommandType.StoredProcedure);
}
}

这样做允许计算机将工作线程用于数据库 I/O,释放处理能力来处理其他任务,例如接受对 API 端点的其他请求。像@StephenCleary 这样的人可能会阐述我所说的和/或更正它。 @StephenCleary 的 blog和书绝对值得一读以了解异步编程。

希望对您有所帮助。

关于c# - Web Api 2 OWIN Selfhost 处理多个并发请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44003390/

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