应用链:
在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流程 - 我不想中止任何其他待处理请求。
答案 0 :(得分:1)
来自我的一位导师:
执行此操作的最佳方法是在ISAPI生成的线程中生成新线程,并将其引用存储在会话高速缓存中。 ISAPI线程在执行您的工作时等待此线程 - 您可以通过缓存的引用终止此线程,ISAPI线程将终止。
我实施了这个解决方案,效果非常好。