2012-04-03 59 views
2

*)我有一个在IIS 7.5 - Server 2008 R2下运行的Delphi XE ISAPI DLL。该DLL启动TISAPIApplication的一个实例。应用程序驻留在一个谨慎的,固定的,预先确定的URL上,并在特定端口(不是端口80)上侦听请求 - 所有这些当然都是“标准配置”。在我的服务器上,我有几个dll,每个启动一个TISAPIApplication的不同实例,映射到不同的URL,并侦听不同的端口。在运行时,我根据端口号区分应用程序的各种实例(Dev,Prod,FailOver等)(比解析URL更容易)。我已经浏览了TISAPIApplication及其祖先和相关类的文档和源代码,,但我无法在任何地方找到一个属性,告诉我该应用程序的特定实例正在侦听的端口 - 该端口似乎只能根据请求提供请求。在我看来,由于在简单的部署中,侦听端口通常是静态的,我应该能够在应用启动时获取该端口值 - 这将有助于分配某些资源,而不是等待请求进入等。从Delphi TISAPIApplication获取端口/ URL数据:

*)任何人都知道如何做到这一点?我需要从哪里抢到哪些房产?事实上,我找不到任何能够告诉我任何有关应用程序本身驻留的URL的东西 - 一切似乎都按照每个请求的基础进行。

( 请 - 我不是在寻找解决方法告诉我如何通过的要求去做,或者说HTTP是无状态的,一切工作在每个请求的基础 - 我知道那些变通方法,并不愿尽管线程是由ISAPI派生的,以'无状态'的方式处理请求,但是当IIS加载ISAPI dll时启动TISAPIApplication实例,并且此TISAPIApplication实例在ISAPI应用程序的生命周期中持续存在并包含状态在应用实例 的生存期内有效的信息)。

TIA

回答

0

我想也许我试图在这里做一些不完全有效的事情:即使简单的应用程序通常有一个坐在不改变的指定端口上的监听器,它并不一定是这样的 - 确定确定监听端口的唯一方法是从请求本身,而不是之前-so TISAPIApplication不应该坚持关于监听端口的信息,这本质上是不稳定的。

1

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


正如你写

该应用程序驻留在一个不显眼的,固定的,预定的URL,和一个特定的端口(未端口80),用于请求

上 监听

在运行时,我区分应用程序的各种实例 (开发,PROD,故障转移等)的基础上的端口号

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

+0

“也许这个函数可以在DLL初始化时调用” - 是的,MAYBE - 尽管从外观上看,它期望与请求相关的数据。坦率地说,重要的是不要去布置所有需要调用该函数的事情,而只是发现它不起作用。 :-) 谢谢。 – Vector 2012-04-04 21:53:57

+0

我想我要关闭这个问题,因为我试图在这里做一些不完全有效的事情:尽管简单的应用程序通常有一个监听器坐在不改变的指定端口上,但它不会必须这样 - 确定聆听端口的唯一方法是从请求本身,而不是之前。 “ – Vector 2012-04-04 22:05:16

+0

”......在这种情况下,可以在应用程序生命周期的早期阶段使用的功能将是一项优势。“ - 是的,这就是发生了什么事。我实现的解决方法是一个旧标准 - 首先请求进行适当的初始化并设置一个已完成的标志。在进行呼叫之前检查标记 - 因此后续请求将跳过初始化代码。 – Vector 2012-04-05 15:40:17