- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 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.
GetExtensionVersion
根据上述 MSDN 引用执行初始化。
GetExtensionVersion
非常适合初始化需要在 Web 应用程序的生命周期内持续存在的资源,而不是基于每个客户端请求进行初始化,因为当第一个请求映射到您的 ISAPI DLL 时,IIS 只调用一次。如果有兴趣,请参阅
How can I make ADO database connections in TISAPIApplication
before processing incoming requests?更多细节。
GetExtensionVersion
的上下文中公开网站 URL 的 Delphi 函数或属性。 ,它在应用程序开始处理实际客户端请求之前运行 - 发生在
HttpExtensionProc
(德尔福的
TWebApplication
与使用
TWebActionItem
Hook )。
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 中使用)是调用 GetModuleFileName
在 HInstance
在 DLL 中可用的全局变量,并读取 DLL 所在目录中的配置文件。(默默地假设 DLL 本身的目录不能通过 IIS 上的 URL 访问......)
关于delphi - 如何从 IIS ISAPI 的 GetExtensionVersion 中获取我网站的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351821/
我是一名优秀的程序员,十分优秀!