我使用 ADO 和 devexpress 在 D2010 中构建了一个广泛的 2 层应用程序。我想将其升级为使用 Datasnap 主要是为了向易受攻击的 SQL 服务器提供 HTTPS 通信,而不仅仅是 TCP/IP。我已经遵循了我能找到的所有 Datasnap 教程。我有 Cary Jensen 的 Delphi 深入:ClientDatasets。一切都很好,但是这些示例几乎没有用,因为在真正的数据库应用程序中,网格是通过将多个表连接在一起来填充的,而不是从单个表中填充的。这立即消除了客户端数据集的“自动解析”功能。即使建议的 beforeupdateevent 处理程序也无法在 datasnap 应用程序中工作,因为数据库只能由 datasnap 服务器访问。因此,在我看来,我必须在 datasnap 服务器上为我需要的每个插入/更新创建一个方法,然后将这些方法公开给客户端并根据需要从客户端调用它们,以请求 datasnap 服务器执行所需的操作更新/插入。这看起来工作量很大!
是否有更简单的方法来实现与 SQL Server 的 https 通信?
哦,如果您想知道,该应用程序已经是伪 3 层,因为网格连接到 TdxMemData,而不是直接连接到 TADOQueries。我自己处理所有插入/更新的方式与使用 TClientdatasets 时所需的方式相同。
最佳答案
如果您认为您的数据库容易受到攻击,请在使用 D2010 Datasnap 时三思。它非常非常脆弱。不要被 HTTPS 愚弄,在充分保护 channel 方面仍然缺少很多部分。例如,一旦您使用 Datasnap,SQL Server Windows 集成身份验证(基于 Kerberos...)就消失了。
有关完整说明,请参阅:Why Datasnap 2010 is a toy library 。这当然是我的个人意见,但它是基于我自 Delphi 3 以来使用 Midas/Datasnap 的经验以及我目前有关 IT 安全的工作。
无论如何,你对插入/更新/删除的理解是错误的。您必须使用提供者的事件来在 datasnao 服务器端控制它们。它比在两层应用程序中处理它们要复杂一些,但您不需要为每个操作使用临时方法。
关于sql-server - 使用 Datasnap 构建真正的数据库应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7783144/