datasnap的restful服务器
说真话,这玩意真的简单好用。但你要控制好:
1、内存泄漏和异常处理好;
2、有没有发现,通过服务器对数据库进行读写时,在资源管理器中,如果是sql server,就会看到连接1433的连接一直挂在那里。好闹心。
说主题:因为采用get or post链接,将LifeCycle设置为'Invocation'。每次客户端获取数据时,就会产生读写数据库。在DSServerModuleDestroy的方法中加上
try FDManager.Active := False; // FDConnection1.Connected := False; // 尝试关闭数据库连接 一定要关闭,否则连接一直存在 // FDManager.Active := False; // 尝试停止 FireDAC 管理器 一定要关闭,否则链接时会出错 except on E: Exception do begin if Var_Log then PostLog(llError, 'Error closing connections or manager: ' + E.Message); end; end; if Var_Log then begin PostLog(llHint, 'FDConnection:close'); end;
如此简单,就会在资源管理器TCP中,再也看不到1433的链接了。
GOODLUCK!!!
补充:
在TServerContainer中,不要随随便便增加方法。 procedure TServerContainer.DSServerClass1DestroyInstance( DSDestroyInstanceEventObject: TDSDestroyInstanceEventObject); begin if Var_Log then begin PostLog(llHint, 'DSDestroyInstanceEventObject.free'); end; end; 就因为增加了追踪日记,导致流程跑偏了。 自以为聪明,在这里又追加执行DSDestroyInstanceEventObject的Destroy。晕透了。记得有人提出这个体会:不要随随便便增加代码,不要随随便便和陌生人说话