2012-04-03 202 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