问题标签 [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 投票
1 回答
1317 浏览

c++ - 如何从 midas 源代码构建 midas.obj

最近我在 midas 上发现了一个问题并修复了它,现在的问题是我想使用 MidasLib 而不是 midas.dll 并且使用源代码我只能构建 DLL。

源代码是 C++,我对它知之甚少。我知道 MidasLib.pas 在内部使用 midas.obj,所以我需要创建它以将 midas 静态链接到我的应用程序。如何在 C++ Builder 上做到这一点?(XE)

0 投票
0 回答
3664 浏览

delphi - Delphi XE2 datasnap callback example

I am trying to create a small example of how to exchange objects using calbacks, but I am experiencing some problems.

  1. When server creates and broadcasts objects, some clients callback connections are closed randomly with time (sometimes after server has sent like 100.000 objects, sometimes after 100 even less).
  2. When a client calls a server method to broadcasts an object, it happens offten that the client connection to the server is closed. All this is stopping me from converting my current project to a real client server one. Here is my source, including the executables for both server and client: DataSnapExample.rar

P.S. I have tried Mat DeLong's Monitoring demo, I've put a ttimer on server's main form, that calls the broadcast message menu event, and result was same - after sending messages for a while, some clients are disconnected. I'm afraid this happens because of a client-server bug in Delphi XE2 Datasnap. Here is the demo: DataSnap XE2 - Unified Connection Monitoring Sample Component

Can someone tell me if it is my fault or not? Thanks...

0 投票
1 回答
1591 浏览

delphi - Delphi XE2 DataSnap - 在服务器方法模块中访问 REST 连接属性

我正在构建一个 XE2 DataSnap 服务器,它将为来自 REST 客户端的连接提供服务。我的 DSServerClass LifeCycle 属性设置为“调用”。REST 连接属性将包括通过 DSAuthenticationManager UserAuthenticate() 事件处理的用户名和密码。我需要知道的是如何访问服务器方法类中的用户名和密码?我希望能够知道哪个 REST 用户名/密码启动了我的服务器类的对象实例。

0 投票
2 回答
11730 浏览

delphi - Delphi XE2 DataSnap - 通过带有进度条的 TStream 下载文件

我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并很好地读取流。我的问题是,在 TStream 对象可供读取之前,方法调用需要一段时间才能完成,但在服务器端,我可以看到方法调用只需要一秒钟来创建要返回的对象。我希望流对象会立即返回,以便我可以读取流并显示下载进度的进度条。还有其他方法可以做到这一点吗?

服务器方法很简单:

0 投票
2 回答
871 浏览

delphi - 连接到 dbx DataSnap 用户会话的消息循环

有没有办法连接到 dbx 用户会话的 WndProc?

背景:dbx DataSnap 使用 Indy 组件进行 TCP 通信。在最简单的形式中,DataSnap 服务器是一个接受连接的 Indy TCP 服务器。建立连接后,Indy 会为该连接创建一个线程来处理该连接的所有请求。

这些用户连接中的每一个都消耗资源。对于具有几百个同时连接的服务器,这些资源可能很昂贵。许多资源可以被池化,但我不想总是在每次需要时获取和释放资源。

相反,我想实现一个空闲计时器。在线程完成资源后,计时器将启动。如果线程在计时器结束之前访问资源,则资源仍将“分配”给该线程。但是,如果在下一次访问之前计时器已过,则资源将被释放回池中。下次线程需要资源时,将从池中获取另一个资源。

我还没有找到办法做到这一点。我试过使用 SetTimer 但我的计时器回调永远不会触发。我认为这是因为 Indy 的线程 WndProc 没有调度 WM_TIMER。我无法控制该线程的“执行循环”,因此我无法轻松检查是否已发出事件信号。事实上,除非线程正在处理用户请求,否则我的这个线程的代码都不会执行。事实上,我希望代码在任何用户请求之外执行。

对原始问题的解决方案或替代方法的建议将同样受到赞赏。

0 投票
2 回答
2831 浏览

delphi - Delphi XE2 DataSnap 服务器 - HTTPS '无法加载证书'

我有一个在 HTTP 上运行良好的现有 DataSnap 服务器(Windows 服务),我现在想添加 HTTPS 作为附加协议。我已经获得并安装了 SSL 证书并生成了证书文件 (.crt) 和私钥文件 (.key)。作为测试,当使用 Delphi XE2 DataSnap Server 向导并勾选“HTTPS”以获取证书页面时,我可以引用 2 个文件并单击成功的“测试”按钮。我添加了一个额外的 TDSHTTPService 组件并将其链接到 TDSCertFiles 组件。在我的服务启动事件中,我在启动 DSServer 之前在 DSCertFiles.CertFile 和 DSCertFiles.KeyFile 属性中设置了 2 个证书文件的路径。尝试启动服务时出现错误:

无法加载证书。错误:140AD002:SSL 例程:SSL_CTX_use_certificate_file:系统库

有什么我想念的吗?

0 投票
1 回答
2657 浏览

delphi - Delphi XE2 DataSnap - 通过 HTTPS 使用 REST 时“正常关闭连接”

我正在尝试使用 REST over HTTPS 从我的 Delphi Win32 应用程序和 Android 应用程序连接到我的 DataSnap 服务。在我的 Delphi 客户端中,我收到消息“正常关闭连接”,而我的 Android 应用程序因“无对等证书”而失败。我猜我需要在客户端安装一些东西。我已经按照其他帖子的建议在 Win32 应用程序的 EXE 文件夹中安装了 2 个 OpenSSL DLL 'libeay32.dll' 和'ssleay32.dll',但这并没有解决问题。

需要注意的一件事是,我可以使用 DBXpress 从 Win32 应用程序通过 HTTPS 成功连接 - 使用 TSQLConnection 组件。它只是无法使用 TDSRESTConnection。对于 Android,我只能选择 REST。

希望我只是缺少一些简单的东西?

0 投票
2 回答
1709 浏览

delphi - 如何从属性Required设置为false的字段中检索信息?

我的软件中有以下 DBX 结构:

我的 TClientDataSet 中的一个字段将Required 属性设置为false,因为该字段会根据数据库(Firebird)上的触发器和生成器自动递增。

但是,在配置了不需要此字段的 TSQLDataSet 和 TClientDataSet 之后,当我尝试从 TClientDataSet 中读取此字段时,我得到了非常奇怪的结果。我怀疑我可能需要做一些额外的事情来强制我的 TClientDataSet 在这种情况下获取该字段的值。

我在这里想念什么?

提前致谢。

编辑

Required 属性的帮助文件说明了这一点,但我不太明白它要我做什么。

描述

指定是否需要字段的非空值。

使用必填来确定字段是否需要值或该字段是否可以为空。

如果字段是使用字段编辑器创建的,则此属性是根据基础表设置的。对于必须具有值(例如,密码或部件号)但基础表不需要该字段的字段,将 Required 设置为 true 的应用程序必须编写 OnValidate 事件处理程序以强制执行该属性。

当Required 属性反映基础数据库表的属性时,尝试发布应用空值会导致引发异常。当基础表不需要该字段时,将 Required 属性设置为 true 的应用程序应在 OnValidate 事件处理程序中针对空值引发 EDatabaseError 异常,以实现相同的结果。

编辑 2

忘了说:在 TDataSetProvider 和 TClientDataSet 之间,有一个 DataSnap 层(TClientDataSet 连接是通过 DataSnap 驱动建立的)。

编辑 3

我用这个 DataSnap 设置创建了一个小测试用例,它运行良好。该项目是遗留的,混乱的,我想要么我在某个地方配置了一个模糊的选项,这让我很痛苦,要么我偶然发现了一个 DataSnap 错误。

0 投票
2 回答
863 浏览

delphi - Delphi XE2、DataSnap 和查找字段的问题

我这里有点问题。我使用 Delphi XE2 DataSnap 技术在我的应用程序服务器中创建了一个查找字段。在客户端,该字段变为 TStringField。现在,问题是我失去了客户端的查找功能。最重要的是,我无法更改客户端的字符串字段,因为它是只读的(即使我手动关闭了只读属性)。

我不想在客户端查找表,因为我不希望在客户端加载所有数据只是为了支持查找。

我可以更改键字段值,但字符串字段查找文本不会更改,除非我应用更新并重新加载数据。

用户希望看到文本更改。

我应该怎么办?

0 投票
4 回答
7192 浏览

delphi - Delphi XE2 DataSnap - 通过 TStream 从服务器到客户端流式传输 JPEG 文件

我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并读取流以下载文件。服务器方法很简单:

它可以很好地下载许多文件类型(PDF、GIF、BMP、ZIP、EXE),但在下载 JPG 文件时它不起作用。在客户端,从方法调用返回的流对象的大小始终为 0,带有 JPG。我可以在我的 PC 上成功地在本地流式传输 JPG 文件,所以它必须与 DataSnap 有关。我做了一些研究,表明 DataSnap 在幕后将流转换为 JSON,当涉及到 JPG 文件时可能会出现问题 - 有人可以证实这一点吗?在客户端,我使用 TDSRESTConnection 来调用服务器方法。我意识到我可以在流式传输之前压缩 JPG 文件,但宁愿不必这样做。