我有一个多层软件,它是两个应用程序(GUI,DataSnap Server).我的DataSnap服务器应用程序有一些错误导致EAccessViolation在某些时候发生.这样的:
Exception EAccessViolation in module unidac160.bpl at 00010CB1.
Access Violation at 002B77832 in module unidac160.bpl. Read of address 0000000C
Run Code Online (Sandbox Code Playgroud)
我想获得完整的调用堆栈并将其记录在文件中.我也使用eurekalog,但它仅适用于gui应用程序.
我正在使用Delphi XE DataSnap REST服务器并尝试返回JSON序列化对象.我的方法返回到客户端的结果如下所示:
{"type":"ServerMethodsUnit1.TJSONIssue",
"id":1,
"fields":{
"FIssueNo":90210,
"FTitle":"Beverly Hills...that''s where I want to be",
"FKind":"Wishlist"
}
}
Run Code Online (Sandbox Code Playgroud)
格式良好的JSON.
问题是,当客户端收到消息时,会添加一些东西,它看起来像这样:
{"result": ["{\"type\":\"ServerMethodsUnit1.TJSONIssue\",
\"id\":1,
\"fields\":{
\"FIssueNo\":90210,
\"FTitle\":\"Beverly Hills...that's where I want to be\",
\"FKind\":\"Wishlist\"}
}
"
]
}
Run Code Online (Sandbox Code Playgroud)
我"result"在前面得到了一堆反斜杠字符和标签.
我想知道是否有人知道为什么我会得到这些额外的东西以及如何摆脱它.
我试图创建一个如何使用calbacks交换对象的小例子,但我遇到了一些问题.
- 当服务器创建并广播对象时,一些客户端回调连接会随着时间的推移随机关闭(有时在服务器发送后像100.000对象,有时甚至在100以后).
- 当客户端调用服务器方法来广播对象时,会发生关闭与服务器的客户端连接.所有这些都阻止我将当前项目转换为真正的客户端服务器.这是我的源代码,包括服务器和客户端的可执行文件: DataSnapExample.rar
PS我试过Mat DeLong的监控演示,我在服务器的主窗体上放了一个ttimer,调用广播消息菜单事件,结果是一样的 - 发送消息一段时间后,一些客户端断开连接.我担心这是因为Delphi XE2 Datasnap中的客户端 - 服务器错误.以下是演示:DataSnap XE2 - 统一连接监控示例组件
有人能告诉我这是不是我的错?谢谢...
在Delphi XE2 DataSnap中,是否有通用的方法来跳过JSON编组中的字段序列化?
TBizObjects = class
DataObject: TDataObject; -- skip this field on serializaing descendants
end;
Model = class(TBizObject);
Run Code Online (Sandbox Code Playgroud) 我试图确定如何使用Delphi REST DataSnap服务器检索会话信息.
我知道,当在同一个客户端页面上时,您可以使用TDSSession方法GetThreadSession访问当前线程会话.
但是,我想要做的是在会话中存储数据(putData),并且当用户从page1移动到page2时仍然能够检索它.目前,如果用户移动到不同的页面,会话将丢失并创建一个新会话,从而丢失我之前设置的会话中的数据.
我试过玩TDSSessionManager.SetThreadSession(sessionid) - 但我似乎无法让它工作.
我已经回顾了备受好评的Marco Cantu白皮书,但是,它没有为这个问题提供解决方案.
我能得到的任何帮助都会很棒 - 即使它只是'嘿,这个主题在书X中有所涉及'.
谢谢!
我正在尝试构建一个作为Windows服务运行的DataSnap Rest应用程序,但该向导只有"独立的VCL应用程序","独立的控制台应用程序"和"ISAPI动态链接库"(我使用的是Delphi XE2)企业).有人可以帮助我.谢谢.
使用Delphi的DataSnap创建的RESTful服务基于HTTP方法类型为DataSnap服务器中公开的REST方法提供了前缀的默认映射.这些如下:
HTTP Method type Prefix Example
GET none MyValue
POST Update UpdateMyValue
PUT Accept AcceptMyValue
DELETE Cancel CancelMyValue
Run Code Online (Sandbox Code Playgroud)
文档声明"可以覆盖映射模式.用户可以根据类名和方法名参数覆盖每种类型的映射." 但是,我完全没有找到有关如何执行此操作的任何文档.我想将PUT的前缀从Accept更改为其他内容.我怎么做?
我应该注意到,StackOverflow上的另一个帖子(REST Datasnap覆盖URI映射)试图通过指出TDSHTTPService具有执行此映射的方法来回答这个问题.同一篇文章还引用了MarcoCantù的DataSnap白皮书,该白皮书据说也描述了如何做到这一点.该白皮书说:"您可以通过处理DSHTTPWebDispatcher组件的四个相应事件处理程序来自定义这些映射."
在RAD Studio XE中,TDSHTTPService和TDSHTTPWebDispather组件都有四个特定事件,对应于上面列出的四种HTTP方法,并且用于映射前缀.XE2及更高版本中不存在这些方法.
我使用echostring和reversestring示例方法在Delphi XE8中使用向导创建了一个简单的DataSnap客户端/服务器应用程序.当我在服务器dpr中放入"ReportMemoryLeaksOnShutdown:= True"并从客户端调用echostring和/或reversestring方法时结果很好但是当我关闭服务器应用程序时(关闭客户端之后)我总是得到2个或更多的未知内存泄漏.这是一个我在互联网上找不到的已知错误,还是有解决方案?
服务器代码:
unit ServerMethodsUnit;
interface
uses System.SysUtils, System.Classes, System.Json,
Datasnap.DSServer, Datasnap.DSAuth, DataSnap.DSProviderDataModuleAdapter;
type
{$METHODINFO ON}
TServerMethods = class(TDataModule)
private
{ Private declarations }
public
{ Public declarations }
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
end;
{$METHODINFO OFF}
implementation
{%CLASSGROUP 'FMX.Controls.TControl'}
{$R *.dfm}
uses System.StrUtils;
function TServerMethods.EchoString(Value: string): string;
begin
Result := Value;
end;
function TServerMethods.ReverseString(Value: string): string;
begin
Result := System.StrUtils.ReverseString(Value);
end;
end.
Run Code Online (Sandbox Code Playgroud)
DFM
object ServerContainer: TServerContainer
OldCreateOrder = False
Height = 271
Width = 415 …Run Code Online (Sandbox Code Playgroud) 我有一个Delphi XE2 DataSnap服务器(Windows服务)连接到服务REST客户端请求的后端MS SQL Server 2008(相同的服务器盒).
直到最近,一切都工作得很好,我遇到了一个问题,由于某种原因,DataSnap服务失去了与SQL Server的连接.
该服务无法重新建立连接,我不得不重新启动DataSnap服务以继续.
这让我思考,因为目前该服务仅使用为所有客户端请求共享的1个SQL连接(TADOConnection).我这样做是因为我不希望为每个客户端请求实例化一个新的SQL连接.
我正在考虑为每个请求建立一个单独的SQL连接是否真的会更好,如果开销会很明显 - 有人可以评论/建议吗?
我几个小时以来一直在搜索Embarcadero资源和Indy资源,以及Google,但未能在TIdHTTPWebBrokerBridge上找到任何关于HTTPWebBrokerBridge(.net)的文档.它在做什么,它暴露了什么方法,属性和事件.
有手头有用链接的人吗?
谢谢
阿明.
datasnap ×10
delphi ×10
delphi-xe2 ×4
rest ×4
ado ×1
callback ×1
callstack ×1
debugging ×1
delphi-xe ×1
delphi-xe7 ×1
delphi-xe8 ×1
indy ×1
json ×1
memory-leaks ×1
session ×1
sql ×1