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.asaxplik 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.asaxpliku lub użycie nowej <system.webserver>sekcji w web.configpliku.
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 IAppBuilderinterfejs napotkany w Startupklasie oraz niektóre komponenty oprogramowania pośredniego OWIN (OMC) dostarczone przez Microsoft. Za pomocąIAppBuilderzasadniczo 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.asaxnadal jest obsługiwane wraz z Startupklasą OWIN , podczas gdy oboje mogą robić podobne rzeczy. Na przykład możesz zaimplementować CORS Global.asaxi uwierzytelnianie przy użyciu oprogramowania pośredniego OWIN, co staje się naprawdę mylące.
Moją ogólną zasadą jest całkowite usunięcie Global.asaxpliku na korzyść korzystania za Startupkaż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.csplik. Tam konfigurujesz hosta i ponownie określasz Startupklasę, w której konfigurujesz potok. Korzystanie z OWIN (przy użyciu IAppBuilder.UseOwinmetody 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/…