我已经制作了Intraweb ISAPI应用程序。构建dll后,我在IIS上创建了一个Web站点,并为该应用程序创建了一个池。在Inetpub目录上,为Internet来宾帐户和IIS_WPG帐户设置了权限。
当我尝试从IE(http://ip.0.0.1/website/application.dll)访问网页时,它返回 HTTP 500 或
错误。在互联网上搜索后,它说这是COM初始化的问题。但是在应用程序的数据模块中有这样的代码:
initialization
CoInitialize(nil);
finalization
CoUninitialize;
有人可以提出任何建议吗?
答案 0 :(得分:3)
不要使用自己的CoInitliaze调用,但是instread使用ServerController并将ComInitialization属性设置为ciMultiThread。
从我的IntraWeb课件手册:“当应用程序需要使用(D)COM时,需要TComInitialization类型的ComInitialization属性(ciNone,ciNormal,ciMultiThread)。由于IntraWeb在不同的线程中执行请求,每个线程必须使其成为自己打电话给CoInitialize。 默认情况下,此属性设置为ciNone,表示不需要COM支持。如果需要COM支持 - 例如,如果要连接到DataSnap服务器 - 则需要将ComInitialization设置为ciNormal或ciMultiThreaded。 就个人而言,我发现在ISAPI DLL中以某种方式使用COM时没有理由不将它设置为ciMultiThreaded,尽管IIS 6及更高版本可能已经为您处理了所需的ComInitialization,您应该将其设置为ciNone(但看起来它被设置为其他值时会被忽略,所以ciMultiThread也不会受到伤害。“