我有一些发布xml / soap容器的客户端。我想构建一个微型独立的Indy Web服务器应用程序,该应用程序可以接受任何请求并在备注字段中显示PostStream的内容。不幸的是,我不知道如何解码PostStream。我使用此代码出现异常:

ARequestInfo.PostStream.Seek(0, soFromBeginning);
Memo1.Lines.LoadFromStream(ARequestInfo.PostStream);


我正在使用Delphi7 Enterprise

最佳答案

并非每种请求类型都使用PostStream属性,因此在尝试使用它之前,必须检查PostStream是否不是nil

另外,TIdHTTPServer是多线程组件。它的事件是在工作线程中触发的,从主线程外部访问UI组件并不安全,因此在访问TMemo时需要与主线程进行同步。

更新:如果需要始终有一个PostStream可用,则在较早版本的Indy中,可以使用OnCreatePostStream事件创建自己的TStream对象以用作PostStream。在这些版本中,TIdHTTPServer管理它创建的PostStream对象,有时在将它们提供给您之前将其释放,但是直到您完成请求的处理后,才释放用户定义的PostStream对象。但是,在最新的Indy 10版本中,有一个新的OnDoneWithPostStream事件可帮助控制何时为任何给定请求释放PostStream,无论它是由TIdHTTPServer还是由您创建的(在这种情况下,您都是不需要使用OnCreatePostStream事件来延长PostStream的生存期)。在所有版本中,释放PostStream对象时,总是释放未释放的TIdHTTPRequestInfo

10-08 17:15