2015-06-03 24 views
17

Sto solo cercando di capire come funziona il rapporto tra webapi, webhost (iis) e owin. Scriverò la mia attuale comprensione e ti chiedo di dirmi se è corretta o meno.Relazione tra Webapi, Webhost e Owin

  • WebAPI, a differenza di MVC è stato scritto in modo indipendente dall'host. Era nei giorni pre-Owin, ma a quanto pare avevano anticipato che Owin sarebbe accaduto prima o poi. L'indipendenza dell'host significa principalmente che System.Web non è utilizzato da nessuna parte nel codice Webapi. È System.Web che si basa esclusivamente su IIS e non funzionerebbe senza di esso. In questo modo Webapi potrebbe essere teoricamente ospitato ovunque, una volta che altri host saranno disponibili.
  • Webhost (Microsoft.Owin.Host.SystemWeb, Microsoft.AspNet.WebApi.WebHost) è un livello compreso tra un'API di livello superiore (come Webapi) e IIS. Poiché inizialmente Webapi era indipendente dall'host, era necessario un livello intermedio per eseguirlo su un particolare host, come IIS. Webhost per Webapi (Microsoft.AspNet.WebApi.WebHost) fornito questo livello. Successivamente ci sarà anche il layer Webhost per Owin (Microsoft.Owin.Host.SystemWeb), che consentirebbe l'hosting di qualsiasi cosa Owin compatibile su IIS.
  • Owin è venuto intorno l'ultimo. Fondamentalmente forniva un'astrazione che teoricamente avrebbe permesso di ospitare qualsiasi applicazione compatibile Owin su qualsiasi host purché esistesse uno strato tra owin e quell'host. Owin è arrivato con Webhost (Microsoft.Owin.Host.SystemWeb) (simile a come Webapi è arrivato con Webhost) che consentiva l'hosting di app Owin su IIS. Veniva anche con l'auto-host (Microsoft.Owin.SelfHost) che consentiva l'hosting di app Owin all'interno di qualsiasi eseguibile. Per quanto riguarda Webapi, Owin ha anche ospitato l'host Owin per Webapi (Microsoft.AspNet.WebApi.Owin) che consentiva l'esecuzione di WebApi su stack Owin.

Tutto ciò significa che uno ha due diversi modi di ospitare Webapi su IIS. Può essere fatto senza Owin, usando Webapi WebHost, o può essere fatto con Owin Host per Webapi e con Webhost per Owin.

Nuget riferimenti:

È questa comprensione corretta?

+0

Questa comprensione è corretta? Sì. – Andrei

risposta

12

La vostra comprensione è generalmente corretta, ma il ruolo di OWIN sembra frainteso. Una cronologia più completa sarebbe:

  1. OWIN Standard sviluppato per descrivere generica interfaccia Web .NET, alla WSGI/Rake/Connect (first commit in 2010).
  2. ASP.NET WebAPI è sviluppato indipendente dall'host, ma rilasciato con https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/.
  3. Katana progetto implementa diversi host Owin:
    1. https://www.nuget.org/packages/Microsoft.Owin.SelfHost/
    2. https://www.nuget.org/packages/Microsoft.Owin.Host.HttpListener/
    3. https://www.nuget.org/packages/Microsoft.Owin.Host.IIS/
    4. https://www.nuget.org/packages/Microsoft.Owin.Host.SystemWeb/
  4. adattatore ASP.NET WebAPI per OWIN viene rilasciato: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin.

Il riepilogo:

Tutti i mezzi di cui sopra che uno ha due modi diversi di ospitare WebAPI su IIS. Può essere fatto senza Owin, usando Webapi WebHost, o può essere fatto con Owin Host per Webapi e con Webhost per Owin.

Vorrei ribadire che, come:

Tutto ciò significa che uno ha due modi diversi di ospitare WebAPI. Può essere fatto senza Owin, usando WebAPI WebHost, oppure può essere fatto con lo OWIN adapter for WebAPI e qualsiasi host compatibile con OWIN. Le opzioni di hosting su IIS sono Microsoft.Owin.Host.IIS e Microsoft.Owin.Host.SystemWeb. Microsoft.AspNet.WebApi.OwinSelfHost è anche fornito.

+2

L'unica avvertenza che vorrei aggiungere è che è * errato * provare e ospitare in IIS usando Microsoft.AspNet.WebApi.Owin anche se la maggior parte dei campioni lo usa, questo è solo per l'auto-host. Vedi http://stackoverflow.com/questions/33402654/web-api-with-owin-throws-objectdisposedexception-for-httpmessageinvoker e la risposta sottostante sul progetto Katana http://aspnetwebstack.codeplex.com/workitem/2091 –

+1

@PaulHatcher Da quando hai postato il tuo commento, è stato fatto un altro post in quella discussione su CodePlex. Indica una discussione diversa in cui un membro del team Katana richiede di utilizzare Microsoft.AspNet.WebApi.Owin, in modo tale che il membro del team ASP.NET sia disinformato e * funzioni * o abbia ragione, ma funziona abbastanza bene. * (Inoltre, non sono un esperto di OWIN, ma non ha senso dire che "questo pacchetto OWIN è pensato solo per essere usato con questo host OWIN specifico"). * – Stijn

+1

@Stijn Beh, ho avuto un sacco di problemi di stabilità su larga scala fino a quando ho rimosso WebApi.Owin, anche la discussione riguarda la modifica delle intestazioni, ma questa conversazione http://katanaproject.codeplex.com/discussions/540202 che è la fonte menziona altri problemi con l'andare su questa rotta come non supporto del routing degli attributi WebAPI - è un po 'confuso senza consigli canonici –

Problemi correlati