2

*) 我有一个在 IIS 7.5 - Server 2008 R2 下运行的 Delphi XE ISAPI dll。DLL 启动 TISAPIApplication 的一个实例。该应用程序驻留在一个谨慎的、固定的、预定的 URL 上,并在特定端口(不是端口 80)上侦听请求——所有这些当然是“标准配置”。

*) 在我的服务器上,我有几个 dll,每个 dll 启动不同的 TISAPIApplication 实例,映射到不同的 URL,并侦听不同的端口。在运行时,我根据端口号(比解析 URL 更容易)区分应用程序的各种实例(Dev、Prod、FailOver 等)。

*)我查看了 TISAPIApplication 及其祖先和关联类的文档和源代码,但我在任何地方都找不到告诉我应用程序的特定实例正在侦听哪个端口的属性 - 端口似乎是仅在逐个请求的基础上提供。在我看来,由于在简单部署中侦听端口通常是静态的,我应该能够在应用程序启动时获取该端口值 - 这将有助于分配某些资源,而不是等待请求进入等。

*)有人知道怎么做吗?我需要抢夺什么财产,从哪里抢夺?事实上,我根本找不到任何可以告诉我有关应用程序本身所在的 URL 的任何信息 - 一切似乎都在每个请求的基础上工作。

(请 - 我不是在寻找解决方法来告诉我如何通过请求来完成它,或者 HTTP 是无状态的,并且一切都基于每个请求进行 - 我知道这些解决方法并且不想使用它们。而且,虽然线程由 ISAPI 生成以以“无状态”方式处理请求,当 IIS 加载 ISAPI dll 时启动 TISAPIApplication 实例,并且此 TISAPIApplication 实例在 ISAPI 应用程序的整个生命周期内持续存在,并包含在生命周期内有效的状态信息应用程序实例)。

TIA

4

2 回答 2

1

ISAPI 函数 GetServerVariable ( http://www.podgoretsky.com/ftp/Docs/Internet/Late%20Night%20ActiveX/ch7.htm#CHttpServerContextObject - 表 7.7 HTTP 环境变量) 可以返回 SERVER_PORT 变量。也许这个函数可以在DLL初始化的时候调用。


正如你所写

应用程序驻留在一个谨慎的、固定的、预定的 URL 上,并在特定端口(不是端口 80)上侦听请求

在运行时,我根据端口号区分应用程序的各种实例(Dev、Prod、FailOver 等)

我假设你需要在第一个请求到达应用程序之前做一些事情,比如消耗资源的初始化任务,而不是对每个请求都做。在这种情况下,可以在应用程序生命周期的早期阶段使用的功能将是一个优势。但是,我没有对 ISAPI 应用程序生命周期进行研究,以了解这通常是如何完成的。

于 2012-04-04T20:59:46.993 回答
0

我想也许我在这里尝试做一些不完全有效的事情:即使简单的应用程序通常有一个监听器坐在一个不会改变的指定端口上,它不一定是那样 - 唯一的方法确定监听端口的确定是来自请求本身,而不是之前 - 所以 TISAPIApplication 不应该持久化有关监听端口的信息,这本质上是易变的。

于 2012-04-04T22:09:50.237 回答