我有一些客户发布 xml/soap 容器。我想构建一个小型独立的 indy Web 服务器应用程序,它接受任何请求并在备忘录字段中显示 PostStream 的内容。不幸的是,我不知道如何解码 PostStream。我使用以下代码出现异常:
ARequestInfo.PostStream.Seek(0, soFromBeginning);
Memo1.Lines.LoadFromStream(ARequestInfo.PostStream);
我正在使用 Delphi7 企业版
并非每个请求类型都使用该PostStream
属性,因此您必须在尝试使用它之前检查它PostStream
是否不是。nil
另外,TIdHTTPServer
是一个多线程组件。它的事件是在工作线程中触发的,从主线程之外访问 UI 组件是不安全的,所以在访问TMemo
.
更新: 如果您需要始终有一个PostStream
可用的,在旧版本的 Indy 中,您可以使用该OnCreatePostStream
事件来创建自己的TStream
对象以用作PostStream
. 在这些版本中,TIdHTTPServer
管理PostStream
它创建的对象,有时在将它们提供给您之前释放它们,但用户定义的PostStream
对象直到您完成处理请求后才会释放。但是,在最近的 Indy 10 版本中,有一个新OnDoneWithPostStream
事件可以帮助控制何时PostStream
释放任何给定请求,无论它是由您创建TIdHTTPServer
还是由您创建(在这种情况下,您不需要使用该OnCreatePostStream
事件来延长PostStream
的寿命)。在所有版本中,PostStream
当TIdHTTPRequestInfo
对象被释放。