如何获取要在过程结束时执行的代码?



我正在研究一段新的代码,以帮助其他程序员进行应用程序服务器调用。 以前,我们只有一个 .i 文件,并依靠开发人员来确保您进行了所有正确的调用,并在程序结束时清理了应用服务器连接。 显然,有些人过去忘记了这样做,这给我们带来了问题。

我一直在构建一个基本的appserver.cls文件,但是我不知道如何在程序结束时使其断开连接。


到目前为止,我已经尝试了以下方法。

ON CLOSE OF THIS-PROCEDURE  
DO:    
clAppServer:cleanupAppServer(). 
END.

这似乎不会在网络速度调用结束时触发。

DESTRUCTOR appserver():
cleanupAppServer().
END DESTRUCTOR.

这在执行垃圾收集时有效,但是 Progress 似乎在 webspeed 调用结束时不会进行垃圾收集,并且对象仍在内存中(这是我需要处理的完全不同的问题(。

ON CLOSE OF SESSION:LAST-PROCEDURE  
DO:    
clAppServer:cleanupAppServer(). 
END.

这甚至没有明显编译。

我已经尝试了一大堆其他东西,它们是这三个的变体,但无济于事。


有什么办法可以做到我要求的事情吗? 如果它可以在appserver.cls文件中,则奖励积分。

如果我理解这个问题,您希望在工作完成后断开与另一个应用程序服务器的连接。会尝试以下工作吗?

  • 创建应用服务器句柄包装类。此类负责 A/S 连接;它有一个公共的"句柄"(或类似名称的(属性,可用于在应用服务器上运行内容。

  • 在此类的析构函数中,您可以添加执行清理的代码:断开连接并删除服务器句柄。

  • 想要在应用程序服务器上运行某些内容的代码执行类似...

    def var asConn as AppServerConnection.

    asConn = new AppServerConnection((。

    在asConn:Handle上运行foo.p (param1, out param2(.

    原因 GC asConn = ?.

    手动销毁 删除对象为连接。

然后,析构函数将执行正确的操作。

请注意,如果在内部过程或方法中有此代码,则变量将在其末尾超出范围,并且 GC 将启动。

在 https://github.com/consultingwerk/ADE-Sourcecode/blob/566ac0a6e085d6305a8f364f13a1d805d3597d2a/src/netlib/OpenEdge/Net/ServerConnection/ClientSocket.cls

请记住,在 ClientSocket 中,句柄是私有的 - 您可能希望将其设置为常规 AppServer 连接的公共句柄。

最新更新