2011-04-20 121 views
0

我做了一個Intraweb ISAPI應用程序。在建立DLL之後,我在IIS上創建了一個Web站點,併爲應用程序創建了一個池。在Inetpub目錄上,爲Internet來賓帳戶和IIS_WPG帳戶設置權限。在IIS上的Delphi Intraweb網站崩潰

當我試圖從IE(http://ip.0.0.1/website/application.dll)訪問網頁,它返回我HTTP 500

enter image description here

錯誤。在互聯網上搜索後,它說這是COM初始化的問題。但在應用程序的datamodule有這樣的代碼:

initialization 
    CoInitialize(nil); 

finalization 
    CoUninitialize; 

任何人都可以給任何建議?

回答

2

不要使用自己的CoInitliaze調用,但是使用ServerController並將ComInitialization屬性設置爲ciMultiThread。

從我的IntraWeb課件手冊:「應用程序需要使用(D)COM時需要TComInitialization類型的COMInitialization屬性(ciNone,ciNormal,ciMultiThread)。因爲IntraWeb在不同的線程中執行請求,所以每個線程都必須它自己調用CoInitialize 默認情況下,這個屬性設置爲ciNone,表示不需要COM支持。如果你需要COM支持 - 例如,如果你想連接到一個DataSnap服務器 - 那麼你需要設置ComInitialization爲ciNormal或ciMultiThreaded 個人而言,我發現沒有理由不將它設置爲ciMultiThreaded,但在ISAPI DLL中以某種方式使用COM時,雖然IIS 6和更高版本可能已經爲您處理所需的ComInitialization,但您應該將其設置爲ciNone(但看起來像是這樣當設置爲其他值時被忽略,所以ciMultiThread也不會受傷)。「