*) 我有一个在 IIS 7.5 - Server 2008 R2 下运行的 Delphi XE ISAPI dll。 DLL 启动 TISAPIApplication 的实例。该应用程序驻留在一个谨慎的、固定的、预定的 URL 上,并在特定端口(不是端口 80)上监听请求 - 所有这些当然都是“标准配置”。
*) 在我的服务器上,我有几个 dll,每个 dll 启动 TISAPIApplication 的不同实例,映射到不同的 URL,并监听不同的端口。在运行时,我根据端口号区分应用程序的各种实例(Dev、Prod、FailOver 等)(比解析 URL 更容易)。
*)我已经查看了 TISAPIApplication 及其祖先和关联类的文档和源代码,但是我找不到任何可以告诉我应用程序的特定实例正在监听哪个端口的属性- 该端口似乎仅在逐个请求的基础上可用。 在我看来,由于在简单的部署中监听端口通常是静态的,我应该能够在应用程序启动时获取该端口值 - 这将有助于然后分配某些资源,而不是等待请求进入等。
*) 有人知道怎么做吗?我需要获取什么属性,从哪里获取? 事实上,我根本找不到任何可以告诉我有关应用程序本身所在 URL 的信息 - 一切似乎都在每个请求的基础上运行。
( 拜托 - 我不是在寻找解决方法来告诉我如何通过请求来做到这一点,或者 HTTP 是无状态的并且一切都在每个请求的基础上工作 - 我知道这些解决方法并且不想使用它们。 而且,尽管 ISAPI 生成线程以“无状态”方式处理请求,但当 IIS 加载 ISAPI dll 时,会启动 TISAPIApplication 实例,并且此 TISAPIApplication 实例在 ISAPI 应用程序的整个生命周期中持续存在,并包含有效的状态信息在应用程序实例的生命周期内 ).
TIA
最佳答案
ISAPI 函数 GetServerVariable(http://www.podgoretsky.com/ftp/Docs/Internet/Late%20Night%20ActiveX/ch7.htm#CHttpServerContextObject - 表 7.7 HTTP 环境变量)可以返回 SERVER_PORT 变量。也许这个函数可以在DLL初始化时调用。
<小时/>如你所写
The application resides at a discreet, fixed, predetermined URL, and listens on a particular port (not port 80) for requests
和
At runtime, I distinguish between various instances of the application (Dev, Prod, FailOver etc) based on the port number
我假设您需要在第一个请求到达应用程序之前执行某些操作,例如消耗资源的初始化任务,而不是对每个请求执行这些操作。在这种情况下,可以在应用程序生命周期的早期阶段使用的功能将是一个优势。不过,我没有对 ISAPI 应用程序生命周期进行研究来了解这通常是如何完成的。
关于delphi - 从 Delphi TISAPIApplication 获取端口/URL 数据 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9996963/