為什麼要分析CASSINI?
Cassini(卡西尼)是asp.net上的一個開源項目。主要給出一個脫離IIS實現asp.net執行環境。項目演示了如何自己創建一個web server,並且運行一個asp.net應用程序。
研究 Cassini可以了解:
1、.net 環境下的web server如何實現,注意那些問題
2、asp.net的執行本質
3、了解appDomain的執行概念
安裝
沒有什麼問題,默認即可
運行
出現問題,主要是我的.net framework是1.0.3705 而 系統下載的經過編譯的cassini.dll是在v1.1.4322下編譯,更麻煩的是經過簽名的。所以啟動時候回提示找不到v1.1.4322的framework
而我的目標是想分析這個程序,該如何進行?
既然獲得了整個源代碼,我就應該從理論上熟悉並且可以掌握整個系統,我建立一個工程,將全部.cs文件和資源文件加入到一個項目,同時刪除原有項目默認的form1,因為CassiniWebServer.cs已經有一個main入口。
調試,解決問題
1、編譯OK,但是,無法啟動,原來缺少.ico文件。不是已經加入到工程了麼?原來,我們的編譯程序在bindebug目錄下,所以我將CassiniWebServer..ico文件拷貝到bindebug下即可啟動
2、輸入asp.net應用程序根目錄、端口、執行點,OK,點擊Start,出現錯誤,好像告知我端口被占用。不可能!我的80端口 8080端口都沒有被占用,難道是有木馬?我用fport.exe查詢端口,發現根本沒有程序占用。那究竟是什麼原因?好在可以啟動進行調試,我跟蹤到CassiniWebServer.cs的CassiniForm類的Start()函數,發現在以下代碼處發生錯誤
try {
_server = new Cassini.Server(portNumber, _virtRoot, _appPath);
_server.Start();
}
catch {
ShowError(
"Cassini Managed Web Server failed to start listening on port " + portNumber + ".
" +
"Possible conflict with another Web Server on the same port.");
portTextBox.SelectAll();
portTextBox.Focus();
return;
} 也就是在創建server的時候出錯。
但是不利的是,源代碼並未交待錯誤原因,而是武斷的告訴我“Cassini Managed Web Server failed to start listening on port XXX”,顯然,是不慎重的(估計作者對Exception不感冒)。