2011-04-20 1 views
0

Я сделал приложение Intraweb ISAPI. После создания dll я создал веб-сайт в IIS и пул для приложения. В каталоге Inetpub для учетной записи интернет-гостей и учетных записей IIS_WPG установлены разрешения.Дельфийский интернет-крах на сайте IIS

Когда я пытаюсь получить доступ к веб-странице с 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, например.

Из руководства по InaWeb Courseware: «Свойство ComInitialization типа TComInitialization (ciNone, ciNormal, ciMultiThread) необходимо, когда приложение требует использования (D) COM. Поскольку IntraWeb выполняет запросы в разных потоках, каждый поток должен его собственный вызов CoInitialize. По умолчанию для этого свойства установлено значение ciNone, чтобы указать, что поддержка COM не требуется. Если вам нужна поддержка COM - например, если вы хотите подключиться к серверу DataSnap - тогда вам нужно установить ComInitialization ciNormal или ciMultiThreaded. Лично я не нашел причин не устанавливать его в ciMultiThreaded при работе с COM так или иначе внутри ISAPI DLL, хотя IIS 6 и выше могут обрабатывать требуемую ComInitialization уже для вас, и вы должны установите его на ciNone (но похоже, что это игнорируется, когда задано какое-то другое значение, поэтому ciMultiThread не повредит). "