fmpdam-数据库访问中间件

fmpdam-数据库访问中间件 fmpdam简介这是一个使用isapi编写的http服务程序以IsapiModule出现依附于iis的w3wp.exe进程处理uri扩展名为*.fmpps的http请求的名为fmpdam(fast message passing database access middleward )的数据库访问中间件。该中间件具备传统web service接口的所有优点同样可隔离客户程序和数据库间的耦合并保证数据访问过程安全可靠。由于制定了专属协议该中间件相较传统web service接口还有更加规范、统一的通信和错误处理机制使得客户端能够使用一种方法处理所有web service接口的返回结果不必再针对返回不同格式的web service接口作不同处理近而减少整个项目的开发任务。fmpdam服务允许使用扩展名为.fmpps的ini文件格式的脚本文件配置fmpdam服务面对不同请求时的行为达到在不编写或只编写少量代码的情况下产出能够满足用户需求的web service接口目的下例展示了为满足“读取用户昵称”之需求所需编写的代码以上fmpps文件描述的语义为通过名为MySQL的数据源连接数据库带入客户提交的UserName参数执行“SELECT NickName FROM Userwhere UserName‘用户提交的UserName参数’”语句并向用户发回执行结果。其中PrepareStatement键的值还可以是一个存储过程或任何SQL语句。而DSN键的值可以是指向任何数据库的用户、系统或文件DSN当然也可以是任何符合ODBC之规范的连接字符串。由于fmpps文件事先被编译并存储在服务器上且使用了参数化查询所以并不存在SQL注入风险。在尚未开发完成的fmpdam1.3版本中还支持使用vbs和jscript以及javascript处理客户请求近一步增加fmpdam实用性和灵活性。以Windows Server2008 IIS7为例说明如何部署fmpdam服务从此百度网盘-链接不存在下载fmpdam并解压到IIS的运行目录得到fmpdam文件夹。安装fmpdam文件夹中的Visual C 2017 Redistributable Package.x86.exe。打开IIS管理器在左侧连接视图中网站节点下选中你要安装到的网站。在IIS管理器右侧功能视图中双击处理程序映射图标并在IIS管理器最右侧的操作视图中点击添加模块映射打开添加模块映射窗口。在添加模块映射窗口的请求路径、模块和名称分别输入“*.fmpps”不含双引号、IsapiModule和fmpdam-dll并在可执行文件一栏中填入fmpdam第1步解压得到的文件夹里的fmpdam.dll的路径。然后点击访问限制按扭-选中访问选项卡-选中执行单选项并点击确定按扭回到添加模块映射窗口再点击确定按扭。在处理映射程序列表中找到刚添加的名称列为fmpdam-dll的项右击在弹出的菜单中选中编辑功能权限…并在弹出的编辑功能权限对话框中勾选脚本和执行然后点击确定按扭。在IIS管理器左侧连接视图中网站节点下找到你要安装到的网站并右击在弹出的菜单中选择管理网站-高级设置 记下常规节点下的应用程序池的名称假设为DefaultWeb Site。在IIS管理器左侧连接视图中选中应用程序池节点在右侧的应用程序池列表中找到Default Web Site并右击在弹出的菜单中选择高级设置并将弹出的高级设置对话框下的常规-启用32位应用程序项的值设置为True然后点确定按扭。重启网站和应用程序池使设置生效。在网站根目录下创建一个a.fmpps内容为空的文件。并在浏览器中访问http://127.0.0.1/a.fmpps 视网站绑定的地址而定如果浏览器显示“未找到“***\a.fmpps”接口的文档“表示已正确安装了fmpdam服务现在可以使用fmpps文件处理客户请求了。使用fmpps文件处理客户请求关于如何安装配置MySQL和ODBC驱动我不再在此复述。在此假设你的服务器上已安装了MySQL和MySQL的32位ODBC驱动程序且在32位或WOW64的ODBC数据源系统DSN列表中包括了一个名为MySQL的DSN此DSN指向名为test的库并设置了该DSN字符集为utf8。那么现在参照下图在test库中建立Student表并写入下图中的数据然后编辑 a.fmpps写入以下内容并保存fmpps文件中PrepareStatement键的值还可以是存储过程[QueryAge]DSNMySQLReturnResultTRUEPrepareStatementSelect Age From Student WhereName??1Name,10发送以下报文到网站假设网站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协议参考fmpdam1.2协议报文格式说明_keyvalue报文格式_穿女装的程序员的博客-CSDN博客组成的查询结果。fmpps文件格式说明fmpps 文件用于存储经过预编译的SQL语句并描述fmpdam应该在执行参数化查询时如何绑定参数。单个fmpps文件可存储多个SQL语句并且允许每个语句对应不同的DSN在一些需要多库联查时可能需要此功能。注意Fmpps文件必须以UTF8编码保存。图解fmpps文件结构附在fmpdam1.3版本中fmpps文件格式升级为1.1格式PrepareStatement键可以指向一个vbs或js脚本文件允许使用vbs、jscript或javascript处理用户请求该键指向的脚本文件中代码用以处理针对fmpps文件的请求。当针对fmpps的请求到来时fmpdam服务程序将以cscript.exe为宿主进程fmpdam服务会模拟完整的cscript.exe环境开发者可以假设是以cscript.exe为宿主进程的但考虑到效率问题事实并非如此加载脚本随后向宿主进程的标准输入流中分块写入客户端发来的HTTP请求报文脚本运行完毕后或过程中需要向宿主进程的标准输出流写入fmpdam协议格式的响应结果fmpdam服务将负责将结果封装成HTTP响应报文格式回应给客户端。目前fmpdam1.3版尚未开发完成不知能否有后续。