- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在Delphi XE6中使用DataSnap传递和返回Stream?
当我调用服务器端方法时,我的流是正确的类,具有大小和位置。然而,当它到达我的客户时,该类不是我所期望的,并且它没有大小或位置
//客户端代码
procedure TForm1.brnGetReportClick(Sender: TObject);
var
RunReportObj: TRunReportObject;
S: TStream;
FS: TFileStream;
begin
....
try
S:= (ClientModule1.ServerMethods1Client.getReport(RunReportObj));
//ShowMessage('Class = ' + S.ClassName + #10#13 +
// 'Size = ' + intToStr(S.Size) + #10#13 +
// 'Position = ' + intToStr(S.Position));
S.Position:= 0;
FS:= TFileStream.Create('test.rpt', fmCreate or fmOpenWrite);
FS.Position:= 0;
try
FS.CopyFrom(S, S.Size);
finally
FS.Free;
end;
finally
S.Free
end;
end;
我在上面的代码中调试 showmessage,显示以下内容
Class = TDBXStreamReaderStream
Size = -1
Position = 0
//服务器端方法
function getReport(const ARunReportObj: TRunReportObject): TStream;
var
r: String;
SS: TStringStream;
begin
result:= TMemoryStream.Create;
r := getRunReportJSON(ARunReportObj);
SS := TStringStream.Create(r, TEncoding.ASCII);
try
try
ServerContainer1.idHttp1.Post
('https://imserver1.runit.com/isapi/isellitreporttest.dll/isellit', SS, result);
ShowMessage('Class = ' + Result.ClassName + #10#13 +
'Size = ' + intToStr(result.Size) + #10#13 +
'Position = ' + intToStr(result.Position));
Result.Position:= 0;
except
end;
finally
SS.Free;
end;
end;
我在上面的代码中调试 showmessage,显示以下内容
Class = TMemoryStream
Size = 373760
Position = 373760
最佳答案
这就是设计的。 DataSnap 仅保证您从服务器获取TStream
,而不保证它实际上是哪个类。您可以从中阅读,但仅此而已。
Position = 0
也是预期的,因为这是您在服务器中设置的。另一方面,我不确定 Position = 0
等其他内容是否有用,因此如果您在无论如何,客户端。虽然,当服务器之前没有将其设置为 0 时,流可能不会在预期位置开始。
对于 Size
属性,我引用了 TStream
文档:
The Size property typically indicates the size of the stream in bytes. But a descendent of TStream can use -1 to indicate an unknown size. When the size is unknown, use the return value from TStream.Read to determine end of the stream.
您应该知道,DataSnap 不一定会通过调用 getReport
来传输流内容,但当您从客户端调用 Read
时可能会这样做。这允许诸如电影或广播播客之类的无尽流。
关于delphi - 如何在Delphi XE6中使用DataSnap传递和返回Stream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704286/
我是一名优秀的程序员,十分优秀!