问题标签 [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.
c++ - 如何从 midas 源代码构建 midas.obj
最近我在 midas 上发现了一个问题并修复了它,现在的问题是我想使用 MidasLib 而不是 midas.dll 并且使用源代码我只能构建 DLL。
源代码是 C++,我对它知之甚少。我知道 MidasLib.pas 在内部使用 midas.obj,所以我需要创建它以将 midas 静态链接到我的应用程序。如何在 C++ Builder 上做到这一点?(XE)
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.
- 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).
- 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...
delphi - Delphi XE2 DataSnap - 在服务器方法模块中访问 REST 连接属性
我正在构建一个 XE2 DataSnap 服务器,它将为来自 REST 客户端的连接提供服务。我的 DSServerClass LifeCycle 属性设置为“调用”。REST 连接属性将包括通过 DSAuthenticationManager UserAuthenticate() 事件处理的用户名和密码。我需要知道的是如何访问服务器方法类中的用户名和密码?我希望能够知道哪个 REST 用户名/密码启动了我的服务器类的对象实例。
delphi - Delphi XE2 DataSnap - 通过带有进度条的 TStream 下载文件
我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并很好地读取流。我的问题是,在 TStream 对象可供读取之前,方法调用需要一段时间才能完成,但在服务器端,我可以看到方法调用只需要一秒钟来创建要返回的对象。我希望流对象会立即返回,以便我可以读取流并显示下载进度的进度条。还有其他方法可以做到这一点吗?
服务器方法很简单:
delphi - 连接到 dbx DataSnap 用户会话的消息循环
有没有办法连接到 dbx 用户会话的 WndProc?
背景:dbx DataSnap 使用 Indy 组件进行 TCP 通信。在最简单的形式中,DataSnap 服务器是一个接受连接的 Indy TCP 服务器。建立连接后,Indy 会为该连接创建一个线程来处理该连接的所有请求。
这些用户连接中的每一个都消耗资源。对于具有几百个同时连接的服务器,这些资源可能很昂贵。许多资源可以被池化,但我不想总是在每次需要时获取和释放资源。
相反,我想实现一个空闲计时器。在线程完成资源后,计时器将启动。如果线程在计时器结束之前访问资源,则资源仍将“分配”给该线程。但是,如果在下一次访问之前计时器已过,则资源将被释放回池中。下次线程需要资源时,将从池中获取另一个资源。
我还没有找到办法做到这一点。我试过使用 SetTimer 但我的计时器回调永远不会触发。我认为这是因为 Indy 的线程 WndProc 没有调度 WM_TIMER。我无法控制该线程的“执行循环”,因此我无法轻松检查是否已发出事件信号。事实上,除非线程正在处理用户请求,否则我的这个线程的代码都不会执行。事实上,我希望代码在任何用户请求之外执行。
对原始问题的解决方案或替代方法的建议将同样受到赞赏。
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:系统库
有什么我想念的吗?
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。
希望我只是缺少一些简单的东西?
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 错误。
delphi - Delphi XE2、DataSnap 和查找字段的问题
我这里有点问题。我使用 Delphi XE2 DataSnap 技术在我的应用程序服务器中创建了一个查找字段。在客户端,该字段变为 TStringField。现在,问题是我失去了客户端的查找功能。最重要的是,我无法更改客户端的字符串字段,因为它是只读的(即使我手动关闭了只读属性)。
我不想在客户端查找表,因为我不希望在客户端加载所有数据只是为了支持查找。
我可以更改键字段值,但字符串字段查找文本不会更改,除非我应用更新并重新加载数据。
用户希望看到文本更改。
我应该怎么办?
delphi - Delphi XE2 DataSnap - 通过 TStream 从服务器到客户端流式传输 JPEG 文件
我编写了一个 DataSnap 服务器方法,它返回一个 TStream 对象来传输文件。客户端应用程序调用该方法并读取流以下载文件。服务器方法很简单:
它可以很好地下载许多文件类型(PDF、GIF、BMP、ZIP、EXE),但在下载 JPG 文件时它不起作用。在客户端,从方法调用返回的流对象的大小始终为 0,带有 JPG。我可以在我的 PC 上成功地在本地流式传输 JPG 文件,所以它必须与 DataSnap 有关。我做了一些研究,表明 DataSnap 在幕后将流转换为 JSON,当涉及到 JPG 文件时可能会出现问题 - 有人可以证实这一点吗?在客户端,我使用 TDSRESTConnection 来调用服务器方法。我意识到我可以在流式传输之前压缩 JPG 文件,但宁愿不必这样做。