我正在研究使用Delphi XE2 DataSnap服务器将数据从SQL服务器推送到iPad应用程序的可行性.
我已经编写了Datasnap服务器应用程序,现在正在查看iOS应用程序.TServerMethod将数据作为iOS中的TDataSet返回.不清楚的是如何将Xcode中生成的TDataSet作为NSMutableArray提取?以下是DSProxy.m中生成的代码: -
-(id) getTServerMethods1_GetMileageList {
return [NSArray arrayWithObjects:
[DSRESTParameterMetaData parameterWithName: @"Value" withDirection:Input withDBXType:WideStringType withTypeName:@"string"],
[DSRESTParameterMetaData parameterWithName: @"" withDirection:ReturnValue withDBXType:TableType withTypeName:@"TDataSet"],
nil];
Run Code Online (Sandbox Code Playgroud)
}
在提出这个问题后,我意识到要构建我需要的东西,我最好依靠一些框架"REST和JSON ready".
由于我拥有Delphi Professional,我应该升级到Enterprise以获得DataSnap.
现在,升级成本与DataAbstract成本处于相同的范围内.更新:此外,在未来升级到较新版本的Delphi Professional +更新版本的DA将比购买庞大的企业升级(如从XE到XE2)的成本更低.
从这里 RemObjects的人说"与专业一起工作"我也会考虑这个框架.此外,DataSnap似乎非常好(我读过这个,我没有尝试)只来自XE版本,而RemObjects有一个更坚实的过去.
那么谁知道所有产品都可以比较它们,特别是这些功能:
你会建议哪种产品?
为BOUNTY注意: 因为我不喜欢这个没有回答我开始赏金.我希望有人使用Datasnap或RemObjects回答原来的问题吗?
我正在玩Delphi.我的大多数桌面开发的是.NET中完成的,并嵌入了C.系统我已经做了一些Web开发的回报率和Python的(Django的,CherryPy的)我有兴趣参加的裂缝在项目,这将是一个Web服务( REST或SOAP)具有本机客户端和Web客户端.
因为我最近被重新激发学习德尔福,我很好奇的选择是构建Web服务和Web客户端与德尔福.大多数Delphi文档都有点过时,但到目前为止我发现了这些选择:
我觉得WebSnap已经死了,但其他技术仍在开发中.是否有关于调查哪种技术的指导?
ps我意识到Delphi并不是一个非常受欢迎的网页开发选择,但我很想尝试,因为我一直在学习VCL.
我正在使用生成的DS客户端代理类通过TDSRESTConnection连接到DataSnap服务器.连接工作正常,我可以调用服务器方法.我现在想要通过代理服务器进行连接,所以我在TDSRESTConnection对象上设置属性,但我可以看到没有任何内容通过代理服务器发送,就好像属性被忽略一样.我的代码如下:
var
myDS: TServerMethodsClient;
begin
DSRESTConnectionCfg.ProxyHost := 'localhost';
DSRESTConnectionCfg.ProxyPort := 8888;
myDS := TServerMethodsClient.Create(DSRESTConnectionCfg, False);
myDS.ServerMethodOne();
myDS.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我也尝试过设置:
DSRESTConnectionCfg.HTTP.ProxyParams.ProxyServer := 'localhost';
DSRESTConnectionCfg.HTTP.ProxyParams.ProxyPort := 8888;
Run Code Online (Sandbox Code Playgroud)
两者都没有效果.但是我知道这个代码在我之前使用的Delphi版本中运行,它是XE6.问题似乎在转向XE10.
任何人都可以对此有所了解吗?
我正在使用Delphi XE2编写DataSnap REST服务.我注意到DataSnap中的REST URI必须严格遵循这种格式(请参阅此处):
http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*
Run Code Online (Sandbox Code Playgroud)
一个着名的例子是DataSnap服务器向导创建的示例方法:
http://my.site.com/datasnap/rest/TServerMethods1/ReverseString/ABC
Run Code Online (Sandbox Code Playgroud)
在URI中提供参数有两种常用方法:
DataSnap REST肯定支持Path Segment参数URI.DataSnap REST中是否支持查询字符串参数URI?
我有以下REST URI示例,发现它似乎不可能使它适用于当前的DataSnap REST库:
/客户/ A1234
返回ID为A1234的客户对象
/customers/A1234.xml
以XML格式返回ID A1234的客户对象
/customers/A1234.json
以json格式返回ID A1234的客户对象
/customers/A1234.html
以html格式返回ID A1234的客户对象
/客户?NAME =比尔
返回名称中包含Bill的客户列表
我需要在需要集中数据和文件存储系统(用于文档成像)的环境中部署Delphi应用程序,但是有多个分支机构具有相对较差的互连性.我相信3层数据库应用程序是最好的方法,因此我可以提供丰富的桌面体验,并且需要相对轻量级的数据传输.到目前为止,我简要介绍了Delphi Datasnap,kbmMW和Remobjects SDK.似乎kbmMW和Remobjects SDK使用最少的带宽.有没有人在具有大量用户的挑战性环境中部署任何这些技术的任何经验(我需要支持700+)?谢谢!
好的 - 我们有一个有趣的问题.
一些背景:
我们的主要应用程序使用Indy 10.但是,我们使用Indy 10源代码并修复其中的错误,重新编译并安装我们自己的Indy组件集.
我们正在迁移到Delphi XE并希望开始使用DataSnap.
DataSnap需要Indy的"官方发货"版本,这与我们定制的Indy版本不兼容.
我们的DataSnap服务器将是独立的应用程序,但由于我们在IDE中安装了自己的Indy,因此我们无法"跨越流".
好的,因为这个兼容性问题,我们无法开箱即用Delphi XE的DataSnap.
所以我的问题是:
是否可以使用新的/不同版本的Indy在Delphi XE中重新编译DataSnap包?
感谢你的想法.
在我的Datasnap客户端应用程序中,我使用1个TSQLConnection作为我的方法和ProviderConnection.连接丢失时出现问题.TSQLConnection.Connected和TSQLConnection.ConnectionState都没有捕获到它.
当我的TSQL连接打开但我丢失了互联网连接,或者服务器停止.Datasnap客户端应用程序提供了大量错误.(服务器方法或ClientDatasets)
我已经创建了一个函数来管理我的服务器方法的SQL连接.但是当例如关闭通过TDSProviderConnection连接的ClientDataset时会出现更多问题.
问:如何管理客户端应用程序以安全地捕获TSQL连接上的任何断开连接. 问:如何管理停机时间,以及如何处理未保存的客户端状态.
停机后重新连接不是问题.
调用servermethod时:这会抛出异常.
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
Run Code Online (Sandbox Code Playgroud)
所以我写下一个方法,用虚方法从我的数据模块中获取TSQLCONNECTION.
function TDMForm.DSConnection: TSQLConnection;
var
tmpM:TServerMethodsClient;
begin
result:=nil;
if assigned(MYTSQLCONNECTION) then begin
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
try
try
tmpM.Ping;
result:=MYTSQLCONNECTION
except
ReconnectForm.ShowModal; // has a reconnect button that tries to reconnect + shutdownbutton
if ReconnectForm.modalresult=mrOK then
result:=MYTSQLCONNECTION
else
MainForm.Close;
end;
finally
tmpm.Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我用这种方式写了这个方法,因为只有找出连接是否丢失的方法是通过伪方法,它会抛出相同的错误...然后我可以查询重新连接或关闭程序.
编辑:(我期待某种一般的答案和指导方针,做和不做.不是我的代码的更正,这只是为了表明我现在在做什么.)
我编写了一个DataSnap服务器方法,它返回一个TStream对象来传输文件.客户端应用程序调用该方法并正确读取流.我的问题是,该方法调用需要一段时间才能完成之前,T流对象可供阅读,但在服务器端,我可以看到,该方法调用只需要一秒钟创造返回对象.我希望立即返回流对象,以便我可以读取流并显示下载进度的进度条.还有其他方法可以做到这一点吗?
服务器方法很简单:
function TServerMethods.DespatchDocument(sCompanyID, sDocOurRef: string): TStream;
var
sSourceFilePath: string;
strFileStream: TFileStream;
begin
sSourceFilePath := GetDocumentPDFFilePath(sCompanyID, sDocOurRef);
strFileStream := TFileStream.Create(sSourceFilePath, fmOpenRead);
Result := strFileStream;
end;
Run Code Online (Sandbox Code Playgroud) 在我的客户端应用程序中,我使用以下代码在标头中添加一个标记:
RESTRequest.Params.AddItem('Authorization', 'Bearer ' + MyToken, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);
Run Code Online (Sandbox Code Playgroud)
我想使用datasnap在我的服务器中获取此令牌.
可能吗?
我怎样才能做到这一点?
我可以验证Datasnap执行TIdCustomHTTPServer.DoParseAuthentication和DoParseAuthentication调用FOnParseAuthentication它是否已分配.
那么,我怎么能破解Datasnap分配我自己的OnParseAuthentication?
我认为这解决了我的问题.
datasnap ×10
delphi ×10
delphi-xe2 ×2
indy ×2
remobjects ×2
rest ×2
disconnect ×1
download ×1
firemonkey ×1
http-headers ×1
intraweb ×1
ios ×1
objective-c ×1
packages ×1
progress ×1
proxy ×1
stream ×1
xcode ×1