我最近开始使用Delphi中的DataSnap来生成RESTful web服务。在遵循了Marco Cantu本人和互联网上其他几位指南的指导后,我已经成功地让整个“链条”运作起来。
但是有一个小问题需要解决:客户端现在可以将流(以及其大小)发送到服务器(由于这里存在错误DataSnap XE2 and TStream method parameters,读取时会一直读到发送的大小),然后服务器将其重新组合成文件并保存到磁盘上。
但对于一个3.66MiB的文件,这需要超过50秒!
这应该是正常情况吗?在服务器上,我有:
但是有一个小问题需要解决:客户端现在可以将流(以及其大小)发送到服务器(由于这里存在错误DataSnap XE2 and TStream method parameters,读取时会一直读到发送的大小),然后服务器将其重新组合成文件并保存到磁盘上。
但对于一个3.66MiB的文件,这需要超过50秒!
这应该是正常情况吗?在服务器上,我有:
try
F := TFileStream.Create('written.dat', fmCreate);
F.Position := 0;
F.CopyFrom(Data, DataSize);
finally
F.Free;
在客户端方面:
var
Server: TServerMethods1Client;
DBStream: TFileStream;
begin
Server := TServerMethods1Client.Create(SQLConnection1.DBXConnection);
try
DBStream := TFileStream.Create('DataSnapServer.exe', fmOpenRead);
DBStream.Position := 0;
Showmessage(IntToStr(Server.SendData(DBStream, DBStream.Size)));
finally
Server.Free;
任何帮助都将不胜感激!
谢谢,Adrian
interface
定义的服务即可(无需通过所有DataSnap管道和向导,并且具有非常好的速度) - 它甚至可以使用http.sys内核模式服务器来处理文件,而在用户空间内存中不需要进行内存拷贝。 - Arnaud Bouchez