我不知道這是不是一個小BUG,但我已經沒有辦法解決這樣的問題。
在自己定義的一個httpHandlers裡,無法使用Session,每次出現的錯誤是對象沒有引用到執行個體。經過調試發現HttpContent雷根本沒有Session對象。
而且鬱悶的是,不管是自己的實現了IHttpHander的類,還是從Page繼承下來的類,只要在Web.Config裡添加了這個Hander,那麼在處理這個Hander的時候,都是無法使用Session對象的。
當然,應該不只Session對象不能使用,應該還有其它對象不能用,只是我沒有一一驗證。
另處一個問題就是關於驗證碼的問題。如果自己寫了一個Page用來產生動態驗證碼,但應用程式已經使用了From驗證,那麼在請求驗證碼的時候就會要先請求Form驗證,從而形成了一種死迴圈。
形成這種死迴圈的不僅僅是驗證碼上與Form驗證的問題,同樣也存在於頁面的驗證上。
一般,我們是採用login.aspx做為登入頁面,而這時,預設的login.aspx是不須要驗證的,否則就會進入死迴圈,從而使IIS掛起。
形成這樣設計錯誤很容易,例如我們做了一個父類,用於所有的頁面。而這個父類是要求驗證的,這時,如果login.aspx也從這個父類派生的話,那麼這樣的死迴圈就會出現。
再加上驗證碼及Handler裡的一些問題,就已經使得一個B/S結構的應用程式無法在單個Application上部署了。
當然,要解決上面的問題其實也很簡單:
1、產生的驗證碼的頁面不用驗證就行了。因此,有兩種做法,一是另外加一個web.config,從而使它可以在不用驗證的情況下產生圖片。
2、頁面驗證的死迴圈問題,如果login頁面也想從要求驗證的父類繼承,那麼唯一可行的辦法是重載父類的驗證方法,或者在login頁面上添加自己的特別認證,例如:給一個公用帳號,使它成為可以通過login頁面認證的帳號。
3、HttpHander裡無法訪問Session的問題,我目前沒有辦法解決,可行的方法是放棄使用HttpHander而用Page.