在IIS中,我們有一個處理請求的aspnet_isapi擴展,然后它生成一個行程w3wp.exe,w3wp.exe然后加載并啟動CLR,然后CLR完成它的作業。 現在,Kestral被配置在Main()方法里面,所以首先Main()應該執行,那么誰來啟動Core CLR呢?是windows的IIS和Linux的Apache嗎?IIS和Apache是否知道如何搜索和啟動Core CLR?
我所知道的是,當一個.NET應用程式被執行時,當時的控制將轉到作業系統,作業系統創建一個行程來加載CLR。
作業系統用于加載CLR的程式被稱為運行時主機,它取決于應用程式的型別,即桌面應用程式或基于網路的應用程式,而有所不同。
桌面應用程式的運行時主機是一個名為 CorbinToRuntime 的 API 函式。
基于Web的應用程式的運行時主機是ASP.NET作業行程(aspnet-wp.exe)。 那么,怎么可能先執行Main()方法,然后再執行CLR呢,我無法消化,請幫助。
uj5u.com熱心網友回復:
忘掉你對IIS的所有了解吧。
對于Apache或nginx,只需在本地埠(例如http://localhost:5000)運行你的ASP.NET Core控制臺應用程式(初始化Core CLR),然后設定反向代理規則,將外部流量轉到該埠。
這大概就是 Microsoft 在本文中記錄的內容
這樣的反向代理設定很常見,因為其他網路堆疊(Node.js、Python、Go)也在使用同樣的方法。
由于這種特定的設定,Linux 通過分析 COFF 封套(dotnet 可執行檔案,或者您自己的可執行檔案用于自包含部署)來定位本地條目(而不是您管理的 Main),從而啟動您的 .NET Core 控制臺應用程式。
Apache/nginx無論如何都不參與。
呼叫這個條目會觸發CoreCLR的初始化,反過來,你的托管程式集被加載,托管的Main被呼叫。
您可能會發現像這樣的文章很有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309775.html
標籤:
