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