USEGEAR

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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   USEGEAR  阅读(5)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2023-02-18 PG把多条记录合并成字符串,用逗号分隔
2023-02-18 sqlite把多条记录合并成字符串,用逗号分隔
点击右上角即可分享
微信分享提示