问题标签 [datasnap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1511 浏览

delphi - 并发控制

您好
,我想知道在 3 层应用程序中实现并发控制的最佳方式?可能首先想到的是:

  1. 客户想要编辑数据集中的记录。
  2. 向服务器发送请求,请求锁定该记录
  3. 服务器根据锁表接受/拒绝编辑请求

基于这种情况,锁应该引用锁定的记录和使用该记录的客户端。
客户端必须定期向服务器发送保持活动消息。保持活动状态用于释放锁定的记录,以防我们在编辑操作中丢失了客户端。

我将使用 Delphi 和 datasnap。也许这是一个新手问题,但我必须问!

0 投票
2 回答
2284 浏览

c# - c#中的datasnap客户端

如何使用 Visual Studio 2008(或 2010)在 c# 中创建 datasnap 客户端?

datasnap 有 ado.net 提供程序(C#)?

0 投票
1 回答
2061 浏览

delphi - Delphi DataSnap 授权不尊重 TRoleAuth 属性

我正在尝试在 Delphi XE DataSnap 应用程序中实现授权。我将其分解为一个非常简单的示例,但仍然没有看到 TRoleAuth 属性对方法或类的影响。

这是一个简单的 DSServerMethods 类,其中包含生成的示例方法。班级已经装饰了客人和任何人授权的角色,以及不受欢迎的拒绝角色。ReverseString 方法已被 readonly denied 角色修饰:

我在 OnUserAuthenticate 方法上分配角色。例如,我有一个用户,我从 OnUserAuthenticate 为其分配只读角色,我认为该角色应该拒绝该用户执行 ReverseString 函数的权限。

据我了解,我的代码应该将用户角色与 TDSAuthenticationManager 的 OnUserAuthorize 方法中的 EventObject.AuthorizedRoles 和 EventObject.DeniedRoles TStrings 进行比较,并相应地设置此方法的有效形​​式参数。

这是我用于测试的简单 OnUserAuthorize 方法。当我使用调试器进入它以响应具有只读角色的用户尝试调用 ReverseString 时,EventObject.AuthorizedRoles 和 EventObject.DeniedRoles 都为零,并且 EventObject.Roles 包含只读角色。

我是否错过了重点,或者是否需要在某处设置某个属性以启用 TRoleAuth 属性?

= = = = = = = = = 编辑:Mat DeLong 提供了答案。DSAuth 单元(其中声明了 TRoleAuth 自定义属性类)在定义 DSServerModule 后代的单元的接口部分中丢失。

0 投票
1 回答
1530 浏览

delphi - DataSnap "Plain Old Delphi Objects" and nested objects

A new article about DataSnap in Delphi XE explains that DataSnap now is able to transfer TObject-descendants between server and client, similar to the Java Enterprise Edition concept of POJO's ("Plain old Java objects").

Does this new feature work if such a PODO has a nested object-type properties which needs to be initialized, for example a TStrings property? Will all of these sub-objects be serialized and transferred with their current values? What about system resource properties, like TFileStream, THandle or TThread, which would make no sense in a serialized object, can these be tagged as 'not serializable'?


Some information is in the DocWiki, including this:

These are the fields for which there is already a built-in conversion/reversion: integer, string, char, enumeration, float, object, record. For the following types, the field values are ignored and user conversion is expected: set, method, variant, interface, pointer, dynArray, classRef, array.

0 投票
2 回答
5747 浏览

multithreading - DELPHI:多线程客户端/服务器数据快照错误

这是我在这里的第一篇文章-所以要温柔:-)

我想构建一个使用 datasnap 进行数据传输的客户端/服务器应用程序。这是一个相当简单的任务——有很多例子可以学习。但是 - 拥有一个 Datasnap 服务器(从 Delphi XE 向导构建)我发现自己遇到了一个问题,我希望有人能引导我走向正确的方向。

服务器和客户端在同一台 PC 上运行(这是目前的设计)。服务器正在运行会话生命周期。服务器和客户端共享一个类(发布在下面)..

服务器提供了一个简单的方法——GetServerObject,它使用GetNewObject 方法。服务器本身是一个 VCL 应用程序 - 主要形式是 fmServer。OnCreate 实例化 Servers FormObject 属性 (FormObject := TMyDataObject.Create);

所有这一切都是微不足道的 - 只有当我将我的客户端应用程序扭曲成一个多线程怪物时才会出现我的问题:-)(阅读 - 超过 1 个线程)。

所以这里是客户端的线程代码。

当我创建超过 1 个这些线程时 - 最终我会收到一个错误(“无法实例化......”或一些“远程 dbx 错误......”......等等。

我根本无法让它工作——这样我就可以产生数百个线程/连接到数据快照服务器。

我知道这个问题很棘手——但我希望有人比我聪明:-)

如果我尝试相同的客户端线程代码 - 但访问更简单的服务器方法(让我们说来自示例的 echostring),那么我可以使用数百个线程运行它。也许我在这里回答自己 - 但我太盲目了,无法意识到它:-)

感谢所有帮助

0 投票
2 回答
3493 浏览

delphi - Delphi datasnap 回调 - 广播问题

我又遇到了一种情况,我花了很多时间来尝试根据我的需要自定义 datasnap 回调示例。我是老派 OOP 程序员,在我的“工具箱”PODO 样式中有几个非常大的对象层次结构 :-) .. 拥有这个出色的数据快照功能,我想利用回调的力量。

但是 - 当我实现它时......它只是失败了......(FASTMM4报告内存泄漏)。

尝试创建一个简单的 VCL 数据快照服务器 - TCP。并添加一个按钮和这个来源......

它会起作用-只要您继续使用 TJSONValue ...但是尝试切换注释的代码-您会明白我的意思。

我当然可以将所有现有代码更改为 JSON ......但这根本不可接受。

有谁知道如何使用 BroadcastOBJECT 或 NotifyOBJECT ?

问候 Bjarne

0 投票
4 回答
6636 浏览

delphi - Datasnap xe vs Remobjects DataAbstract

在问了这个问题之后,我意识到要构建我需要的东西,我最好依赖一些“准备好 REST 和 JSON”的框架。

由于我拥有 Delphi Professional,因此我应该升级到 Enterprise 以拥有 DataSnap。

现在升级成本与 DataAbstract 成本在同一范围内。更新:此外,在未来升级到较新版本的 Delphi Professional + 较新版本的 DA 将比购买笨重的 Enterprise 升级(如从 XE 到 XE2)成本更低。

因为这里RemObjects 人们说“与专业人士一起工作”我也会考虑这个框架。此外,仅从 XE 版本开始,DataSnap 似乎相当不错(我读过这个,我没有尝试过),而 RemObjects 的过去则更为可靠。

所以谁知道所有的产品可以在这些功能上进行比较:

  • REST 服务器(用于提供 JSON)
  • 使用方便

您会推荐哪种产品?

赏金注意事项: 由于我不喜欢这个没有回答我开始赏金。我希望原始问题得到回答,有人使用 Datasnap 或 RemObjects 吗?

0 投票
2 回答
1529 浏览

delphi - 是否可以使用新的/不同版本的 Indy 重新编译 Delphi XE 中的 DataSnap 包?

好的——我们有一个有趣的问题。

一些背景:

  1. 我们的主应用程序使用 Indy 10。但是,我们采用 Indy 10 源代码并修复其中的错误,重新编译并安装我们自己的一组 Indy 组件。

  2. 我们正在迁移到 Delphi XE 并希望开始使用 DataSnap。

  3. DataSnap 需要 Indy 的“官方、发货”版本,这与我们定制的 Indy 版本不兼容。

  4. 我们的 DataSnap 服务器将是独立的应用程序,但由于我们在 IDE 中安装了自己的 Indy,因此我们无法“跨流”。

好的,因此,由于这个兼容性问题,我们无法开箱即用地使用 Delphi XE 的 DataSnap。

所以我的问题是:

是否可以使用新的/不同版本的 Indy 重新编译 Delphi XE 中的 DataSnap 包?

你的想法很感激地接受了。

0 投票
1 回答
760 浏览

delphi - 在 DataSnap XE 中访问公共 IP 地址 / 重新编译 DataSnap 框架

DSTCPServerTransport.pas 中的“procedure TDSTCPChannel.Open”方法在分配“FChannelInfo”时使用连接用户的私有IP 地址。当我跟踪 HTTP 传输时,它使用了用户的公共 IP。如果 DSTCPServerTransport.pas 已更新,则

改为

然后 DSTCPServerTransport.pas 将匹配 HTTP 传输实现,并且连接的用户的公共 IP 地址也将通过 TCP 连接的“DSConnectEventObject.ChannelInfo.Info”在 TDSServer.OnConnect 事件中可用。一些开发人员在这两个 EBT 讨论中讨论了这一点:讨论 #1讨论 #2。QC# 是#91030。

我尝试自己进行更改,但了解到我无法重新编译 DataSnap 框架(请参阅此处)。

这会在 XE2 中修复和/或最终用户能否在 XE2 中重新编译 DataSnap 框架?XE2 之前是否会有包含此修复的 DataSnap 补丁?

谢谢,詹姆斯

0 投票
2 回答
5771 浏览

delphi - 如何修改 TDataSetProvider.OnUpdateData 中的字段值

在阅读了关于 TDataSetProvider.OnUpdateData 事件解释的 Delphi 帮助文件后:

  1. 检查数据(例如,对于不应允许的值或数据更改),并引发异常以在更新发生之前取消应用更新。
  2. 在将数据发送到源数据集或数据库服务器之前更改数据(例如加密或解密值)。

我正在寻找如何更改OnUpdateData 数据的示例代码。我已尽力寻找解决方案。这是我可以实现的:

示例 1

示例 1 的问题:不幸的是,我一直收到一些字段值丢失的错误。执行一些调试后,我发现有一些必填字段具有空值。

示例 2:

示例 2 的问题:通过这种方式编写,我们无需调用 DataSet.Edit 和 DataSet.Post。但是设置为 TField.NewValue 的值“zzz”没有保存到数据库中。

我有一些特殊的原因,这个更新必须在 OnUpdateData 中执行,而不是在更新前/更新后记录中。

请指教。非常感谢。