Ich habe eine Selfhosted-Web-API mit OWIN, und ich habe Mühe auf gleichzeitige Verbindungen. Wenn ich einen Stresstest mit 50 gleichzeitigen get-Ereignissen führe, steigt die Antwortzeit A LOT, auch wenn die Operation ziemlich einfach ist, gebe 200 OK mit der in der uri eingegebenen ID zurück.Web Api 2 OWIN Selfhost behandeln mehrere gleichzeitige Anfragen
Wie kann ich meine Web-API OWIN und API-Controller simultan pro Anfragen ausführen?
Hier ist eine Probe von meinem Projekt:
Startup Klasse
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();
}
});
}
}
Meine Konsole Inbetriebnahme von Web-api:
public static void Open()
{
_webApp = WebApp.Start<Startup>(HostAddress);
Console.WriteLine($"Host open -> {HostAddress}");
}
Wie machen Sie Ihren Stresstest? Kannst du diesen Code posten? – MichaelDotKnox
Anstatt Factory.StartNew auszuführen, können Sie auch Task.FromResult (Ok (Id)) zurückgeben, das weniger wahrscheinlich blockiert. Nicht sicher, ob das Ihre Probleme verursachen würde. – MichaelDotKnox
Verwenden von Paesslers Webserver Stress Tool, um den Stresstest durchzuführen. Denken Sie daran, stattdessen einen einfachen Client zu erstellen und zu sehen, wie es geht. Danke für den Tipp mit Task.FromResult. – grmihel