我有一个使用Delphi XE SPI构建的Delphi ISAPI DLL(32位),并托管在运行WinServer 2008 RS2和IIS 7.5的服务器上。如何从IIS ISAPI的GetExtensionVersion获取我的网站的URL?
请参阅MSDN:
Initialization Using GetExtensionVersion:
初始化是由入口点函数 GetExtensionVersion中处理。此函数的作用是执行所有初始化,包括创建工作线程, 同步对象和数据库连接,以及建立用于构建DLL的ISAPI版本 。
在我的ISAPI DLL中,我使用GetExtensionVersion
按照上述MSDN参考进行初始化。 GetExtensionVersion
非常适合需要在Web应用程序的生命周期中持久化的资源的初始化,并非基于每个客户端请求进行初始化,因为当第一个请求映射到您的ISAPI DLL时,它仅由IIS调用一次。如果有兴趣,请参阅How can I make ADO database connections in TISAPIApplication
before processing incoming requests?了解更多详情。
我的一个初始化函数需要如该DLL托管的网站的网址,但我似乎无法找到任何德尔福功能或属性暴露的GetExtensionVersion
范围内该网站的网址,它运行的应用程序开始操作前实际的客户端请求 - 发生在HttpExtensionProc
(Delphi的TWebApplication
使用TWebActionItem
挂钩)。
由于我的ISAPI DLL托管在一个网站中,并且GetExtensionVersion
仅在客户端请求发布到该网站时由IIS调用,所以我认为该网站的URL应在某处可用 - 可能是通过IIS API调用。
如何从GetExtensionVersion
内抓取我网站的网址?
_有可能IIS甚至在调用GetExtensionVersion_时甚至没有将DLL映射到任何网站:这是怎么回事?直到客户端请求发送到您的URL时才会调用它。 _也可能IIS使用同一个DLL用于多个网站_ - 这取决于我如何配置IIS,AFAIK,而我没有这样做。 – Vector 2015-02-05 19:37:12
我把一个包含网站URL的文本文件与DLL一起放到目录中,在GetExtensionVersion中使用'GetModuleFileName',并且稍微剪下一个名字来获取文本文件名并读入我需要的URL。有点迂回,但它似乎是无痛和防弹。 IIS管理API绝对不是**我现在想要弄到的东西。 – Vector 2015-02-05 23:30:15