發表文章

ASP.NET 學習4_IIS pipeline_PrePage執行架構_Webform生命週期

圖片
IIS pipeline 在版號7以上的IIS有提供兩種處理ASP.NET Request的模式(不影響webform的Page Life Cycle) (1)Integrated mode(default): 全新 提高速度和穩定性的模式,可允許.NET開發者 在 ASP.NET visual studio中編寫一些功能(ASP.NET Module) 改變IIS的行為 ,不再通過ISAPI的方式。至於擴充套件,則可以使得我們對於IIS,以及其他型別的請求有更多的控制。 -->Visual Studio中專案種類:ASP.NET Module , 或是選擇Class Library實作IHttpModule interface也可以 (2)Classic: 指的是 相容IIS 6或之前版本的一種模式,一個典型問題就是,在處理 ASP.NET這種動態網站的時候,它是通過一個所謂的ISAPI程式,作為外掛的方式來工作的。針對不同的動態應用程式(例如ASP,PHP等),會需要 不同的ISAPI( Internet Server Application Programming Interface )。 (備註:ISAPI是用來擴充IIS伺服器功能所用的技術,是用 C/C++來編輯的,產生的檔案為dll檔,可供IIS伺服器調用。) Pre-Page Execution Architecture (Integrated Mode) 這一段過程,講白話就是告訴你我在IIS 轉換成應用程式背後的運作原理 首先http.sys是一個protocol listener 負責監聽HTTP請求,也負責 response給Client端的browser。 而當接收完請求會再傳給IIS進行下一步處理(比方要分配給哪個application、process)。 此時下一步該怎麼做就會有一些相關組態設定透過 (1)WAS(Windows Process Activation Service): Windows 處理程序啟用服務 (.exe檔案) WAS會先去讀applicationHost.config去判斷對應的app pool是否有開啟。 若沒有會自行產生新的實體w3wp worker process...

Lesson5_ASP.NET_Win10下IIS的安裝_一些設置教學分享

圖片
找到控制面板:【開始】菜單鼠標右擊,打開【控制面板】 或者輸入方式搜尋皆可 打開控制面板,點擊【程序】,點擊【啟用或關閉Windows功能】 修改勾選IIS的設定 驗證是否正確安裝 可在Browser網址欄輸入http://localhost/iisstart.htm 看網頁是否顯示正常 這裡也找的到安裝的IIS控管介面程式了!! IIS已經運行了所以代表我的網站已經可以掛上去了嗎? 在此我們可先到右側去檢查管理伺服器 看【啟動】是否變灰色,若已經轉灰代表已經正常運作了!!! 主目錄設置 接著要設置此台電腦(作為主機)的主目錄設置 右側-->基本設定-->修改實體路徑 這裡就選自己想指定的位置即可 (在此由於C槽要預留一點空間因此設為 D disk下多建立兩層目錄) 預設顯示文檔設置 (就是當我們在輸入伺服器域名或是IP地址的時候並未指定具體路徑而直接Enter,就會依照預設文件順序去搜索指定文件來作呈現) 這裡double click進入即可看到預設幫我們配好的default files 若我們希望自己建立一個,可能顯示網站搬家之類的資訊。 想做一些客製化(不想讓它自行去照順序找的話) 就可以自己去添加 Port設置方式 最後就是有需要設置所謂的port了 右側->編輯站台底下->繫結->去進行設定 預設指向80 若電腦因port有衝突使得要更換其他port時候再去編輯就可以了!! 回到設定的主目錄 會發現自行產生web.config檔案 在此多添加一個html輸入一些測試用顯示的文字內容 一個是剛剛所設置的預設文件,檔名要取跟剛剛一樣。 一個是額外不同的 打開Browser 先只輸入127.0.0.1 或是localhost 恩.....可能會出現亂碼 可先在後面輸入英文,因為webconfig設置UTF8 國字呈現有亂碼 再次只輸入網址localhost 驗證真的會自動導向預設網頁 輸入另一個網頁也行 以上是針對IIS比較常用的安裝及配置設定教學分享

ASP.NET 學習3_一般處理程序(泛型處理常式)_ashx檔案

圖片
泛型(一般)處理常式(程序) 所謂的泛型(HTTP)處理常式,白話來說就是一個不是 用來顯示畫面的網頁處理subruntime、方法,緊緊就 只是一個負責處理HTTP Request的處理程序 (不包含weborm event life cyce) ,因此較輕量級。 實作了IHttpHandler的Interface,隸屬於web project,副檔名.ashx  (對專案右鍵新增...) https://docs.microsoft.com/zh-tw/previous-versions/visualstudio/visual-studio-2008/bb398986(v=vs.90)?redirectedfrom=MSDN 優點: 不必繼承自Page Class (.aspx要) ,因此沒有這麼多事件 需執行,較不耗資源, 性能比aspx優 。 缺點: 每一個頁面都需要寫對應一個對象的處理程序,因此檔案會較多。 微軟官方程式範例 https://docs.microsoft.com/zh-tw/dotnet/api/system.web.ihttphandler.processrequest?view=netframework-4.8#System_Web_IHttpHandler_ProcessRequest_System_Web_HttpContext_ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 // Name this C# file HandlerTest.cs and compile it with the // command line: csc /t:library /r:System.Web.dll HandlerTest.cs. // Copy HandlerTest.dll to your \bin directory. using System.Web ; namespace HandlerExample { public class MyHttpHandler ...

資料庫設計的心法與一些可以思考的問題

圖片
  起初先問自己幾個問題 What's it for ? 假設你正在搭建一個線上書店網站系統 可能我們可以很快速直接說出「資料庫需要儲存像是產品跟訂單等重要的資料」 ,因為算是很成熟也十分常見的應用,不過聽起來稍微有些籠統模糊。 這個回答確實可能是對的,但我們更應該深入一層去探討該線上商城網站應用程式的目的是捨麼? 畢竟如果只是單純用於存放資料好像聽起來沒捨麼價值,再來就是可能不夠具體、你也無法開始去著手為了解決問題的資料庫設計。 畢竟愈具體描述跟紀錄需求,我們設計出來的DB系統才真正可發揮其價值。 可能當我們經過深層思考跟長期需求洽談後歸納出目的如下 「這套系統有能幫助客戶查找書籍,並且還能觀看到其他人對該書籍商品的評論,還要能夠追蹤各自訂單與購買紀錄,讓客戶可以去貢獻他們的評論,並根據有相似閱讀習慣的人瞭解潛在可能喜歡的商品。」 有沒有發覺,跟一開始的需求描述聽起來你會規畫出複雜度完全不同的資料庫。 What do you have? 1.是否存有既定的資料庫? 可能是Access 或是用Excel之類的在維護,甚至都用紙本? 這樣子會有捨問題? 聽起來你現行雖然有東西可以匯入資料,但仍不滿足你的實際需求。 比較實際案例就是一些中小企業、公司可能不想花錢或起初覺得一些電子單據不需要用ERP或特別客製化找人訂做系統,都用Excel維護,造就可能檔案無法共編,都是一人作業的問題。 也可能引發就是維護的資料相互想看的資料因無系統卡控跟規範導致格式不一致錯亂問題。 無法共編不是問題,也有公司透過google 雲端共享excel來達成多人共同編輯,但缺點想而意見撇除空間使用有限,一些權限劃分無法明確或是資料有機會被竄改的問題也是很多。 因此又回歸最初描述的「資料庫需要儲存像是產品跟訂單等重要的資料」 若遇到這類user回饋這樣子如此籠統的描述,請白眼並提出質疑那有excel跟google文件等方案,為何還需要資料庫?有何效益? 也有可能是資料有捨麼格式錯誤或沒統一,需要先做資料格式前置作業、跨team討論等等。 先抓住機會修復任何問題,再往資料庫創建設計走,避免重蹈覆轍。 2.是否有此資料庫將取代或能幫助到既定流程(or手動流程)的部分? 常見可能就是讓人詬病的紙本資料處理、檔案櫃找資料的不易,無法異地辦公、無紙化好拿ESG認證...etc,有些附加效益,有些有形...

ASP.NET_實踐透過POST方式來開啟另一webform_如何將C#或VB.NET的List透過Json.NET處裡完傳給js

圖片
此時可能已經填塞了兩個List物件 lsColDataKeyCollection lsColDataValCollection 然後是透過Grid選取某列時做出傳送的 【發送端】父頁面 後端VB.NET Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Protected Sub Page_Load ( ByVal sender As Object, ByVal e As System . EventArgs ) Handles Me . Load Dim XC As New NameValueCollection ' ...... do something If Page.IsPostBack = False Then ' 頁面第一次載入只執行一次 ' ...... do something End If AddHandler GridShipContent.SelectedIndexChanging, AddressOf OnGridViewSelectedIndexChanging End Sub Private Sub OnGridViewSelectedIndexChanging(sender As Object, e As GridViewSelectEventArgs) If e.NewSelectedIndex < 0 Then Exit Sub ' ...... do something Me . Page . ClientScript . RegisterStartupScript ( Me . GetType (), "PostTest" , "DoPostOpen()" , True ) End Sub 前端Js部分 1 2 3 4 5 6 7 8 9 10 11 ...

ASP.NET_Webform進行Post傳送並接收來自泛型處裡函式的回傳

於某段事件中(在此用Button)執行HTTP POST 傳送 xxx.aspx Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 Protected Sub btnLoad_Click (sender As Object , e As EventArgs) _ Handles btnLoad.Click #Region "前期串資料" ' .....do something #End Region #Region "WEB POST Request" '在此用的是亂掰的URL 和目錄 'http://192.168.87.87 Dim strURL As String = Request.Url.Scheme & System.Uri.SchemeDelimiter & Request.Url.Host 'http://192.168.87.87/AAA/BBB/CCC/ strURL &= "/AAA/BBB/CCC/" 'http://192.168.87.87/AAA/BBB/CCC/xxx.ashx strURL &= "xxx.ashx" Dim myRequest As WebRequest = WebRequest.Create(strURL) myRequest.Method = "POST" '傳送過程中有包含一些中文內容欄位會特別做Encode Dim...