【问题标题】:Aborting ISAPI request from client:中止来自客户端的 ISAPI 请求:
【发布时间】:2012-01-18 21:14:39
【问题描述】:

应用链:

  • 在 IIS 7.5/Server 2008R2 - 32 位模式和经典模式管道下运行 Delphi ISAPI 应用程序。

  • ISAPI 应用程序 (TISAPIApplication) 是使用 Delphi XE 构建的。

  • Client是一个Delphi exe,它生成一个包含请求内容的XML文档,包括在客户端生成的用于跟踪请求内容的唯一内部标识符等。

  • 客户端生成一个线程并点击 webServer 上的 ISAPI 应用程序,传入包含请求信息的 XML 文档;

  • 客户端线程等待服务器响应,并在线程终止时向客户端发出信号,表明请求已在服务器上处理。

问题:

  • 用户错误地发送了可能会运行数小时和/或阻塞我们的基础架构的请求。

  • 我想让客户端应用程序向服务器发送消息以中止该请求(仅限该请求)。

建议的解决方案:

我建议的解决方案是在 webServer 上创建一个字典,将我的客户端唯一标识符与 ISAPI 进程在服务器端生成的线程的特定句柄或 ID 相关联,以处理请求。此服务器端 ID 随后可用于在客户端使用客户端标识符发送中止请求时跟踪和中止请求。

但是 - 我不知道我应该在服务器端获取什么属性/线程 ID/句柄,如何获取它以及如何使用它中止请求。如果我可以将请求处理程序作为 Delphi 线程访问,那么这一切都应该很容易。

有人知道该怎么做吗?我很确定这是可以做到的,但我不知道该怎么做。在TWebRequest 等的 Delphi XE 文档中四处查看,还没有找到太多。

再次请注意:我只需要终止该特定请求,而不是整个 ISAPI 进程 - 我不想中止任何其他待处理的请求。

【问题讨论】:

    标签: delphi iis iis-7 isapi


    【解决方案1】:

    来自我的一位导师:

    最好的方法是在 ISAPI 生成的线程中生成一个新线程,并将其引用存储在会话缓存中。 ISAPI 线程在执行您的工作时在该线程上等待 - 您可以通过缓存引用终止该线程,ISAPI 线程将终止。

    我实施了这个解决方案,效果很好。

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2014-02-03
      • 2018-08-13
      • 2018-03-05
      相关资源
      最近更新 更多