从客户端中止ISAPI请求:

时间:2012-01-18 21:14:39

标签: delphi iis iis-7 isapi

应用链:

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

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

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

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

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

问题:

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

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

建议的解决方案:

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

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

有谁知道如何去做?我很确定这可以做到,但我不知道该怎么做。在[{3}}等上查看了Delphi XE文档,但还没有找到。

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

1 个答案:

答案 0 :(得分:1)

来自我的一位导师:

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

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