據(jù)庫訪問中間件)
fmpdam簡介這是一個使用isapi編寫的http服務程序以IsapiModule出現(xiàn)依附于iis的w3wp.exe進程處理uri擴展名為*.fmpps的http請求的名為fmpdam(fast message passing database access middleward )的數(shù)據(jù)庫訪問中間件。該中間件具備傳統(tǒng)web service接口的所有優(yōu)點同樣可隔離客戶程序和數(shù)據(jù)庫間的耦合并保證數(shù)據(jù)訪問過程安全可靠。由于制定了專屬協(xié)議該中間件相較傳統(tǒng)web service接口還有更加規(guī)范、統(tǒng)一的通信和錯誤處理機制使得客戶端能夠使用一種方法處理所有web service接口的返回結果不必再針對返回不同格式的web service接口作不同處理近而減少整個項目的開發(fā)任務。fmpdam服務允許使用擴展名為.fmpps的ini文件格式的腳本文件配置fmpdam服務面對不同請求時的行為達到在不編寫或只編寫少量代碼的情況下產(chǎn)出能夠滿足用戶需求的web service接口目的下例展示了為滿足“讀取用戶昵稱”之需求所需編寫的代碼以上fmpps文件描述的語義為通過名為MySQL的數(shù)據(jù)源連接數(shù)據(jù)庫帶入客戶提交的UserName參數(shù)執(zhí)行“SELECT NickName FROM Userwhere UserName‘用戶提交的UserName參數(shù)’”語句并向用戶發(fā)回執(zhí)行結果。其中PrepareStatement鍵的值還可以是一個存儲過程或任何SQL語句。而DSN鍵的值可以是指向任何數(shù)據(jù)庫的用戶、系統(tǒng)或文件DSN當然也可以是任何符合ODBC之規(guī)范的連接字符串。由于fmpps文件事先被編譯并存儲在服務器上且使用了參數(shù)化查詢所以并不存在SQL注入風險。在尚未開發(fā)完成的fmpdam1.3版本中還支持使用vbs和jscript以及javascript處理客戶請求近一步增加fmpdam實用性和靈活性。以Windows Server2008 IIS7為例說明如何部署fmpdam服務從此百度網(wǎng)盤-鏈接不存在下載fmpdam并解壓到IIS的運行目錄得到fmpdam文件夾。安裝fmpdam文件夾中的Visual C 2017 Redistributable Package.x86.exe。打開IIS管理器在左側連接視圖中網(wǎng)站節(jié)點下選中你要安裝到的網(wǎng)站。在IIS管理器右側功能視圖中雙擊處理程序映射圖標并在IIS管理器最右側的操作視圖中點擊添加模塊映射打開添加模塊映射窗口。在添加模塊映射窗口的請求路徑、模塊和名稱分別輸入“*.fmpps”不含雙引號、IsapiModule和fmpdam-dll并在可執(zhí)行文件一欄中填入fmpdam第1步解壓得到的文件夾里的fmpdam.dll的路徑。然后點擊訪問限制按扭-選中訪問選項卡-選中執(zhí)行單選項并點擊確定按扭回到添加模塊映射窗口再點擊確定按扭。在處理映射程序列表中找到剛添加的名稱列為fmpdam-dll的項右擊在彈出的菜單中選中編輯功能權限…并在彈出的編輯功能權限對話框中勾選腳本和執(zhí)行然后點擊確定按扭。在IIS管理器左側連接視圖中網(wǎng)站節(jié)點下找到你要安裝到的網(wǎng)站并右擊在彈出的菜單中選擇管理網(wǎng)站-高級設置 記下常規(guī)節(jié)點下的應用程序池的名稱假設為DefaultWeb Site。在IIS管理器左側連接視圖中選中應用程序池節(jié)點在右側的應用程序池列表中找到Default Web Site并右擊在彈出的菜單中選擇高級設置并將彈出的高級設置對話框下的常規(guī)-啟用32位應用程序項的值設置為True然后點確定按扭。重啟網(wǎng)站和應用程序池使設置生效。在網(wǎng)站根目錄下創(chuàng)建一個a.fmpps內(nèi)容為空的文件。并在瀏覽器中訪問http://127.0.0.1/a.fmpps 視網(wǎng)站綁定的地址而定如果瀏覽器顯示“未找到“***\a.fmpps”接口的文檔“表示已正確安裝了fmpdam服務現(xiàn)在可以使用fmpps文件處理客戶請求了。使用fmpps文件處理客戶請求關于如何安裝配置MySQL和ODBC驅(qū)動我不再在此復述。在此假設你的服務器上已安裝了MySQL和MySQL的32位ODBC驅(qū)動程序且在32位或WOW64的ODBC數(shù)據(jù)源系統(tǒng)DSN列表中包括了一個名為MySQL的DSN此DSN指向名為test的庫并設置了該DSN字符集為utf8。那么現(xiàn)在參照下圖在test庫中建立Student表并寫入下圖中的數(shù)據(jù)然后編輯 a.fmpps寫入以下內(nèi)容并保存fmpps文件中PrepareStatement鍵的值還可以是存儲過程[QueryAge]DSNMySQLReturnResultTRUEPrepareStatementSelect Age From Student WhereName??1Name,10發(fā)送以下報文到網(wǎng)站假設網(wǎng)站IP為127.0.0.1POSThttp://127.0.0.1/a.fmppsHTTP/1.1Content-Type:application/x-www-form-urlencoded; Charsetutf-8User-Agent:TestAgentHost:127.0.0.1Content-Length:8NameJim將得到以下響應報文其中選定部分是由fmpdam協(xié)議參考fmpdam1.2協(xié)議報文格式說明_keyvalue報文格式_穿女裝的程序員的博客-CSDN博客組成的查詢結果。fmpps文件格式說明fmpps 文件用于存儲經(jīng)過預編譯的SQL語句并描述fmpdam應該在執(zhí)行參數(shù)化查詢時如何綁定參數(shù)。單個fmpps文件可存儲多個SQL語句并且允許每個語句對應不同的DSN在一些需要多庫聯(lián)查時可能需要此功能。注意Fmpps文件必須以UTF8編碼保存。圖解fmpps文件結構附在fmpdam1.3版本中fmpps文件格式升級為1.1格式PrepareStatement鍵可以指向一個vbs或js腳本文件允許使用vbs、jscript或javascript處理用戶請求該鍵指向的腳本文件中代碼用以處理針對fmpps文件的請求。當針對fmpps的請求到來時fmpdam服務程序?qū)⒁詂script.exe為宿主進程fmpdam服務會模擬完整的cscript.exe環(huán)境開發(fā)者可以假設是以cscript.exe為宿主進程的但考慮到效率問題事實并非如此加載腳本隨后向宿主進程的標準輸入流中分塊寫入客戶端發(fā)來的HTTP請求報文腳本運行完畢后或過程中需要向宿主進程的標準輸出流寫入fmpdam協(xié)議格式的響應結果fmpdam服務將負責將結果封裝成HTTP響應報文格式回應給客戶端。目前fmpdam1.3版尚未開發(fā)完成不知能否有后續(xù)。