2011-04-20 120 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也不会受伤)。“