USEGEAR

导航

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。晕透了。记得有人提出这个体会:不要随随便便增加代码,不要随随便便和陌生人说话

 

posted on 2025-02-18 18:47  USEGEAR  阅读(37)  评论(0)    收藏  举报