gpt4 book ai didi

delphi - 如何从 IIS ISAPI 的 GetExtensionVersion 中获取我网站的 URL?

转载 作者:行者123 更新时间:2023-12-03 09:24:43 25 4
gpt4 key购买 nike

我有一个使用 Delphi XE SPI 构建的 Delphi ISAPI DLL(32 位),并托管在运行 WinServer 2008 RS2 和 IIS 7.5 的服务器上。

见 MSDN:

Initialization Using GetExtensionVersion:

Initialization is handled by the entry-point function GetExtensionVersion. This function's role is to perform all initialization, including the creation of worker threads, synchronization objects, and database connections, and to establish the version of ISAPI that was used to build the DLL.



在我的 ISAPI DLL 中,我使用了 GetExtensionVersion根据上述 MSDN 引用执行初始化。 GetExtensionVersion非常适合初始化需要在 Web 应用程序的生命周期内持续存在的资源,而不是基于每个客户端请求进行初始化,因为当第一个请求映射到您的 ISAPI DLL 时,IIS 只调用一次。如果有兴趣,请参阅 How can I make ADO database connections in TISAPIApplication before processing incoming requests?更多细节。

我的初始化函数之一采用托管该 DLL 的网站的 URL,但我似乎找不到任何在 GetExtensionVersion 的上下文中公开网站 URL 的 Delphi 函数或属性。 ,它在应用程序开始处理实际客户端请求之前运行 - 发生在 HttpExtensionProc (德尔福的 TWebApplication 与使用 TWebActionItem Hook )。

由于我的 ISAPI DLL 托管在网站中,并且 GetExtensionVersion仅当客户端请求发布到该网站时才由 IIS 调用,我相信该网站的 URL 应该在某处可用 - 也许通过 IIS API 调用。

如何从 GetExtensionVersion 中获取我网站的 URL ?

最佳答案

您需要扩展控制 block 来获取 URL。它被传递给 HttpExtensionProc , 但不是 GetExtensionVersion . IIS 在调用 GetExtensionVersion 时可能还没有将 DLL 映射到任何网站。 .此外,IIS 可能对多个网站使用相同的 DLL,并且仍然调用 GetExtensionVersion。一次。

具体到您的问题,我看到两个选项:您可以访问 IIS Admin API ( perhaps with this ) 以找出您的 DLL 用于哪个网站,但这可能是您唯一需要 IIS Admin API 的,并且在安全方面需要太多您不想在其下运行应用程序的访问权限。

另一种选择(我自己在 xxm 中使用)是调用 GetModuleFileNameHInstance在 DLL 中可用的全局变量,并读取 DLL 所在目录中的配置文件。(默默地假设 DLL 本身的目录不能通过 IIS 上的 URL 访问......)

关于delphi - 如何从 IIS ISAPI 的 GetExtensionVersion 中获取我网站的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com