我有一些发布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
。