如何在客户端仍处于连接状态时更新 DataSnap 服务器?

2023-12-06

我们使用有状态的 DataSnap 服务器来执行某些业务逻辑任务,并提供客户端数据集数据。

如果我们必须更新服务器来修改业务规则,我们将新版本复制到新的空文件夹中并注册它(取决于 Delphi 版本,只需启动或运行 TRegSvr 实用程序)。

即使旧服务器实例正在运行,我们也可以执行此操作。然而,注册新版本后,所有新的客户端连接仍将使用当前正在运行的(旧)服务器实例。所有客户端必须首先断开连接,然后新服务器将用于下一个客户端。

有没有办法将所有新客户端连接定向到新服务器,注册后立即?

(我知道新的或更改的方法签名也需要更改并重新启动客户端,但这个问题是关于不影响接口的内部修改)

我们使用 Socket 连接,所有客户端共享同一个服务器应用程序(仅打开一个应用程序窗口)。早期,我们使用了远程数据模块的不同配置,这导致每个客户端只有一个应用程序窗口。也许这可以是一个解决方案? (因为每个新客户端都会启动当前注册的可执行文件)

更新:Delphi XE 是否为(更新服务器的)“热部署”提供一些支持?我们目前使用 Delphi 2009,但如果 XE 能够更轻松地实现“热部署”,我们将升级到 XE。


您可以将您的应用程序服务器分成两个新服务器,一个是一个简单的代理对象,将所有方法(并且可选地包含状态信息,如果有)重定向到实际实现您的业务逻辑的第二个服务器。您还需要在代理服务器中实现“静默重新连接”功能,以便在您决定随时更换业务应用程序服务器时不打扰连接的客户端。我自己以前从未做过这样的设计,但希望这个想法很清楚

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在客户端仍处于连接状态时更新 DataSnap 服务器? 的相关文章

  • TControlState.csDesignerHide 与 TControlStyle.csNoDesignVisible

    VCL 似乎提供了两种向表单设计者隐藏控件的机制 TControlState csDesignerHide and TControlStyle csNoDesignVisible 就 IDE 而言 它们之间有什么区别 什么时候应该使用哪个
  • 如何使用 Delphi Sydney 10.4.2 和 Edge Webbrowser 组件获取 HTML SOURCE

    I have TEdgeBrowser在德尔福 10 4 2 中 我想从 HTML 代码中提取基于 RegEx 的字符串 在过去 这是可能的TWebBrowser 仅适用于 IE 11 或更低版本 作为 selectedEngine 但我的
  • 如何正确实现TBitmap的扫描线访问?

    我正在尝试根据以下方式访问位图的扫描线关于内河码头的文章 http edn embarcadero com article 29173 使用像这样的扫描线 for y 0 to n do begin line bitmap scanline
  • iOS Objective-C 对象:何时使用release,何时不使用它

    我在 iOS 下 正在使用 delphi Tokyo 进行开发 这是我的代码 aUIImage TUIImage Wrap TUIImage alloc initWithCGImage aCGImageRef try aData TNSDa
  • Indy FTP 传输类型

    我正在使用 IdFTP Indy 10 组件从远程位置下载一些文件 zip 和 txt 在获取每个文件之前 我将 TransferType 设置为二进制 IdFTP TransferType ftBinary IdFTP Get ASour
  • 在 Outlook 中创建带有附件的邮件并显示它

    我想在 Outlook 中创建一封带有附件的邮件并在发送之前显示它 但我想我已经尝试了几乎在网上找到的所有示例 但没有任何运气 我可以使用 Indy 但我非常想使用 Outlook 来确保邮件正确 因为它是用于商业用途 函数的任何输入 该函
  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 为应用程序启用主题

    我有一个旧的应用程序 在Win XP中的delphi 7中启动 现在我正在使用delphi 2009 win Vista 如果我开始一个新项目 所有按钮都有一个圆形边缘 但在我的旧应用程序中 所有按钮都有 方形 形状的外观 有什么设置我错过
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString
  • Delphi DataSnap REST 服务器从 TStream 返回 JSON 数组,而不是二进制

    我有一个与 Android 客户端通信的 REST 服务器 我将它从 XE3 ish 升级到 Berlin 其中一个服务器方法返回一个包含 jpeg 的 TStream 并且工作得很好 很高兴将图像作为二进制图像返回 升级到 Berlin
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • Delphi中的抽象类

    我正在使用一个具有许多抽象类的组件套件 现在我想应用多态性 但在创建对象时收到错误抽象类 即使我不需要 我是否应该重写所有虚拟方法 有什么解决方法或解决方案吗 为了创建类的实例 您需要重写所有声明为虚拟抽象的方法 即使您不使用它们 如果您确
  • 如何追踪“地址 00000000”的访问违规

    我知道如何创建 map 文件来在错误消息包含实际地址时跟踪访问冲突错误 但是如果错误消息说怎么办 Access violation at address 00000000 Read of address 00000000 我从哪里开始寻找这
  • 在 Delphi 2009 上安装最新版本的 Indy 10 [重复]

    这个问题在这里已经有答案了 是否有更新 Delphi 2009 中的 Indy 10 组件的分步指南 我读过正在卸载线程 https stackoverflow com questions 486210 what is the proper
  • 在 Delphi 2007 中将具有透明度的位图保存为 PNG

    我有一个包含透明度信息的 Delphi 位图 32 位 我需要将其转换并保存为 PNG 文件 同时保留透明度 我目前拥有的工具是graphics32 Library GR32 PNG 由Christian Budde 提供 和PNGImag
  • 查找Delphi项目中的所有编译错误

    我正在对我的 Delphi 项目进行一些重构 我希望能够做出改变 然后看看all项目中因该更改而中断的地方 类似于 Eclipse 列出项目的所有编译错误 在 Java 中 在 Delphi 中 我可以进行更改 然后重新编译我的项目 但编译
  • Delphi 流畅的界面

    使用上有什么优点和缺点流畅的界面 http en wikipedia org wiki Fluent interface在德尔福 流畅的界面应该会增加可读性 但我对此有点怀疑one包含很多链式方法的长 LOC 是否存在编译器问题 是否存在任
  • 对象的引用计数

    在我的代码中 我使用一个小的数据存储类 它是在不同的地方创建的 为了避免内存泄漏并简化事情 我想使用引用计数 所以我这样做了 type TFileInfo class TInterfacedObject IInterface 并删除了我对

随机推荐

  • iOS,将文件从收件箱文件夹复制到文档路径

    我启用了文档类型以将文件从其他应用程序导入或复制到我的应用程序 我有一些疑问 1 应该在哪里创建将文件从收件箱移动到文档目录的方法 这是正确的地方吗 func applicationWillEnterForeground applicati
  • 将语音输出解析为 JSON 以调用应用程序 API

    这是一个想法 我们有带有公开的 Restful API 的 Web 应用程序 它接受 json 现在 如何使用 Google 语音 API 获取用户语音输入 将其转换为文本 然后以某种方式将该文本转换为 API 所需的 JSON 然后使用
  • 未找到样式属性 attr/@attr/minTextSize

    我长期以来一直在尝试找出问题所在 但不幸的是无法 If I do android enableAapt2 true 代码工作正常 但是删除相同的代码 应该是强制的 会抛出错误 incremental mergeDevDebugResourc
  • 如何合并两个文件?

    我有两个文件 File 1 7118 7457 7591 7539 8001 File 2 5003 5008 5011 5026 5028 5029 5031 我需要的输出 7118 5003 7457 5003 7591 5003 75
  • Scala 中的右关联方法有什么好处?

    我刚刚开始使用 Scala 并且刚刚了解了如何创建方法右结合 与更传统的左结合性在命令式面向对象语言中很常见 起初 当我看到示例代码时consScala 中的列表 我注意到每个示例总是在右侧有列表 println 1 List 2 3 4
  • Elasticsearch - 从 6.7 升级到 7.0 后,此搜索不会返回正确的结果

    query constant score filter bool should terms field a value1 value2 must term field b value
  • JPEG编码器速度超慢,如何优化?

    我正在 Flash 构建器中使用 actionscript 3 0 构建一个应用程序 这是一个后续问题这个问题 我需要将字节数组上传到我的服务器 但是我使用的函数将位图数据转换为ByteArray速度超级慢 慢到我的移动设备都卡住了 我的代
  • Sencha Touch 复选框字段具有带有长标签的时髦布局

    我的应用程序中的几个复选框字段有很长的标签 不幸的是它会导致一些奇怪的行为 有什么办法可以让这个看起来好一点吗 我的意思是 如果我 触摸 灰色区域 复选框不会激活 即使复选框位于灰色区域内 但我必须单击白色区域 这有点令人困惑 即使我设定l
  • 如何在 Oracle 查询中禁用 PL/SQL

    以下是我希望阻止在我的服务器上运行的查询类型的示例 begin While True LOOP dbms output put line tst END LOOP end 此查询 或其他类似查询 可能通过 Oracle JDBC 瘦驱动程序
  • Swift - 更新/刷新显示时间的标签

    我有一个以 12 小时格式显示当前时间的标签 但是 它不会在每次分钟 小时更改时更新 刷新时间 我需要它在时间改变时自动将标签更改为当前时间 斯威夫特 3 解决方案 class ViewController IBOutlet weak va
  • onfocus时如何更改文本框的背景颜色?

    我尝试了这段代码 但它不起作用 当我聚焦文本框时 它显示错误 function ChangeBgColor obj evt if evt type focus style background lightgrey else if evt t
  • bxslider 上 z 索引元素的顺序

    我需要使用无子元素来订购 bxslider 的内容 图像和顶部文本之间 e g div ul li img src image1 jpg span text span li ul div class under text over imag
  • Facebook ShareDialog 中未显示说明

    我正在 Android 应用程序中使用 Facebook 的 ShareDialog 尝试 ShareLinkContent 以下是我使用过的代码片段 我有帖子所需的内容标题和描述 当我尝试发布它时在手机中显示时很好 但是当我在 Faceb
  • 在Python 2.7中读取大型lz4压缩JSON数据集[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我需要分析作为 lz4 压缩 JSON 文件分发的大型数据集 压缩后的文件将近1TB 由于成本原因 我不想将其解压缩到磁盘 数据集中的每条 记录 都非常小 但将整个数据集读入内存显然是不可
  • 不使用 Azure 客户端 SDK 连接到 IoT 中心

    我想不使用客户端 SDK 连接到 Azure Iot Hub 在https azure microsoft com nb no blog upload files from devices with azure iot hub 有关于如何执
  • 如何添加到 Windows 中的 PYTHONPATH,以便它找到我的模块/包?

    我有一个目录 其中托管我的所有 Django 应用程序 C My Projects 我想将此目录添加到我的PYTHONPATH这样我就可以直接调用应用程序 我尝试添加C My Projects 到我的 WindowsPath来自 Windo
  • 将文档上传到 Google 云端硬盘时检测冲突

    我的 Android 应用程序更新了 Google 云端硬盘文档 该文件也可以在其他地方修改 例如通过云端硬盘网络界面 因此文件上传可能会发生冲突 然而 这种情况应该很少发生 这就是为什么我不希望我的应用程序首先查询修订历史记录 因为这在大
  • e.target 和 e.currentTarget 之间的区别

    我不明白其中的区别 它们看起来相同 但我想它们不是 何时使用其中之一的任何示例将不胜感激 e target是什么触发事件调度程序触发和e currentTarget是您为侦听器分配的内容
  • python代码中的Kivy ids

    main from kivy app import App from kivy uix button import Button from kivy uix screenmanager import ScreenManager Screen
  • 如何在客户端仍处于连接状态时更新 DataSnap 服务器?

    我们使用有状态的 DataSnap 服务器来执行某些业务逻辑任务 并提供客户端数据集数据 如果我们必须更新服务器来修改业务规则 我们将新版本复制到新的空文件夹中并注册它 取决于 Delphi 版本 只需启动或运行 TRegSvr 实用程序