3

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

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

我正在使用 Delphi7 企业版

4

1 回答 1

1

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

另外,TIdHTTPServer是一个多线程组件。它的事件是在工作线程中触发的,从主线程之外访问 UI 组件是不安全的,所以在访问TMemo.

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

于 2013-10-31T19:39:09.127 回答