【问题标题】:DB, Sessions and Persistence with IntraWeb 12 in Delphi XE2Delphi XE2 中 IntraWeb 12 的数据库、会话和持久性
【发布时间】:2012-01-12 14:45:38
【问题描述】:

我正在搜索有关 IntraWeb 应用程序的数据库连接(在我的例子中是 Firebird)的信息。

我特别需要知道在带有 LockDataModule 函数的 TDataModule 上使用数据库或在 UserSessionUnit 上使用数据库所涉及的区别。 例如,如果没有用户在使用服务器,我需要完全断开数据库,最多连接 30 个用户。

我可能在最坏的情况下必须连接到一些旧的悖论数据库,我需要一个可以处理它的结构(我知道我必须生成一个基于 WebApplication.AppID 的文件夹来处理会话)。在最坏的情况下......

提前感谢您提供的任何信息或有用的链接^^

【问题讨论】:

  • IntraWeb 会话是否没有可用于断开与数据库服务器连接的生命周期方法 (OnSessionEnd)?

标签: delphi session delphi-xe2 intraweb


【解决方案1】:

场景 1 - 您在 Intraweb 应用程序向导中保留“池数据连接”未选中

在这种情况下,向导会创建 ServerControllerUserSession,但不会创建 DataModule。您将数据库、会话和数据集组件放在UserSession

每当有新用户连接到您的网站时,都会创建 UserSession 的新实例并建立与数据库的连接。当 ServerController.SessionTimeOut 由于用户不活动而过期时,UserSession 将被销毁,并且与数据库的特定连接被切断。

对于 30 个并发用户,此模型可能适合您,并且应该保证在网站不使用时所有数据库连接都将被切断。

场景 2 - 您检查 Intraweb 应用程序向导中的“池数据连接”

除了ServerControllerUserSession,向导还将创建一个空的DataModule。您将数据库、会话和数据集组件放在DataModule

ServerModule 上有一个 TIWDataModulePool 组件,该组件具有 PoolCount 属性。

当您的应用程序启动时,它会创建DataModulePoolCount 实例,每个实例都与数据库建立连接。由于您的页面需要访问数据库,因此它们会调用 LockDataModuleUnlockDataModule 来临时使用池中的 DataModule 实例之一。

当您的应用程序关闭时,池中的DataModule 实例将被销毁,并且它们与数据库的连接也将关闭。

当每个用户打开的数据库连接超出您的数据库服务器的能力时,此模型是合适的。对于只有 30 个连接到 FireBird 数据库的用户,我认为不需要。

【讨论】:

  • 回复:“当您的应用程序关闭时......与数据库的连接已关闭” - “应用程序”是否也意味着 IntraWeb 的“Web 应用程序用户会话”?
  • mjn - 不,它没有。用户会话独立于应用程序。
  • 有没有办法为未使用的 DataModule 池条目配置最大 DataModule 生命周期?因为如果连接/事务长时间打开,某些数据库可能会出现问题。对于这些数据库,它们应该在一段时间后关闭(并且可以立即重新实例化)
  • 如果设置为 False,则有一个 TIWDataModulePool.Active 属性会导致 DataModules 被释放。您必须自己在日程安排中编写代码。
  • 这是我在网上找到的关于池数据连接的最佳描述。比我正在阅读的 Bob 博士的书要好得多,因为您说“当每个用户拥有一个开放的数据库连接会超出您的数据库服务器的能力时,此模型是合适的”,这实际上是要理解的关键点。
【解决方案2】:

您可能需要考虑使用http://www.components4programmers.com/ 的 kbmmW 之类的组件集,我多年来一直将它用于桌面应用程序,现在用于 IW 应用程序。我将我的应用程序部署为服务,目前在部署为 ISAPI 时遇到了一些问题。 kbmMW 非常适合具有大量连接的应用程序,因为它提供连接池等......它具有许多功能和优点。亲自查看网站。

我使用的是企业版,不过我认为免费版可能对你有用。

干杯!

-楼

【讨论】:

  • 感谢您分享您的产品,datasnap 似乎非常适合我的新开发,但如果您能告诉我这与 delphi xe2 datasnap 之间的一些区别,我会尝试一下。
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多