Rozumiem, jak ewoluowało uruchamianie / hosting aplikacji WWW, ponieważ jest to dość mylące. Małe podsumowanie:
1. Klasyczny program ASP.NET: Napisz tylko kod aplikacji, aby uruchomić go w ostatnim kroku obowiązkowego potoku IIS
2. ASP.NET z OWIN: Skonfiguruj serwer .NET i napisz kod aplikacji. Nie jest już bezpośrednio sprzężony z IIS, więc nie musisz już go używać.
3. ASP.NET Core: Skonfiguruj hosta i serwer WWW do używania i pisania kodu aplikacji. Nie jest już obowiązkowe korzystanie z serwera .NET, jeśli celem jest .NET Core zamiast pełnego .NET Framework.
Teraz zajmę się bardziej szczegółowo tym, jak to działa i jakie klasy są używane do uruchomienia aplikacji:
Klasyczny ASP.NET
Klasyczne aplikacje ASP.NET mają Global.asax
plik jako punkt wejścia. Te aplikacje mogą być uruchamiane tylko w IIS, a Twój kod jest wykonywany na końcu potoku IIS (więc IIS jest odpowiedzialny za CORS, uwierzytelnianie ... zanim Twój kod się uruchomi). Od IIS 7 możesz uruchomić aplikację w trybie zintegrowanym, który integruje środowisko wykonawcze ASP.NET z IIS. Umożliwia to Twojemu kodowi skonfigurowanie funkcji, które wcześniej nie były możliwe (lub tylko w samych IIS), takich jak przepisywanieApplication_Start
adresów URL w przypadku Global.asax
pliku lub użycie nowej <system.webserver>
sekcji w web.config
pliku.
ASP.NET z OWIN
Przede wszystkim OWIN nie jest biblioteką, ale specyfikacją interakcji serwerów .NET (na przykład IIS) z aplikacjami internetowymi. Same Microsoft mają implementację OWIN o nazwie projekt Katana (dystrybuowanej przez kilka różnych pakietów NuGet). Ta implementacja zapewnia IAppBuilder
interfejs napotkany w Startup
klasie oraz niektóre komponenty oprogramowania pośredniego OWIN (OMC) dostarczone przez Microsoft. Za pomocąIAppBuilder
zasadniczo tworzysz oprogramowanie pośrednie w trybie plug-and-play, aby utworzyć potok dla serwera WWW (oprócz tylko potoku ASP.NET w IIS7 + jak w powyższym punkcie) zamiast być powiązanym z potokiem IIS (ale teraz używasz komponent oprogramowania pośredniego dla CORS, komponent oprogramowania pośredniego do uwierzytelniania ...). Z tego powodu twoja aplikacja nie jest już specjalnie sprzężona z IIS i możesz ją uruchomić na dowolnym serwerze .NET Webserver, na przykład:
- OwinHost Pakiet może być wykorzystywany do samodzielnego hosta aplikacji z serwera WWW Katana.
- Microsoft.Owin.Host.SystemWeb pakiet jest używany do obsługi aplikacji OWIN w IIS7 + w trybie zintegrowanym, subskrybując swoją middleware do właściwych wydarzeń życiowych wewnętrznie.
To, co sprawia, że wszystko jest tak mylące, to to, że Global.asax
nadal jest obsługiwane wraz z Startup
klasą OWIN , podczas gdy oboje mogą robić podobne rzeczy. Na przykład możesz zaimplementować CORS Global.asax
i uwierzytelnianie przy użyciu oprogramowania pośredniego OWIN, co staje się naprawdę mylące.
Moją ogólną zasadą jest całkowite usunięcie Global.asax
pliku na korzyść korzystania za Startup
każdym razem, gdy muszę dodać OWIN.
ASP.NET Core
ASP.NET Core to kolejna ewolucja, teraz możesz kierować reklamy na platformę .NET Core lub pełną platformę .NET Framework. Gdy celujesz w .NET Core, możesz uruchomić aplikację na dowolnym hoście, który obsługuje .NET Standard. Oznacza to, że nie jesteś już ograniczony do serwera .NET (jak w poprzednim punkcie), ale możesz hostować swoją aplikację w kontenerach Docker, serwerze linux, IIS ...
Punktem wejścia dla aplikacji sieci web ASP.NET Core jest Program.cs
plik. Tam konfigurujesz hosta i ponownie określasz Startup
klasę, w której konfigurujesz potok. Korzystanie z OWIN (przy użyciu IAppBuilder.UseOwin
metody rozszerzenia) jest opcjonalne, ale w pełni obsługiwane .
AreaRegistration.RegisterAllAreas();
Wystąpił dla mnie błąd, ponieważ tej metody nie można używać podczas takiego uruchamiania, tylko wApplication_Start
. Jednak moja aplikacja jest interfejsem API i ta metoda jest najwyraźniej przydatna tylko dla aplikacji MVC: stackoverflow.com/questions/18404637/…