Использование объекта словаря в области приложения в Classic ASP - PullRequest
4 голосов
/ 26 мая 2009

Исходя из мой последний вопрос Кто-нибудь знает, как я могу использовать объект словаря в области приложения в Classic ASP? Вы не можете использовать Scripting.Dictionary - при попытке вы увидите нечто похожее на следующее:

Application object error 'ASP 0197 : 80004005'
Disallowed object use /xxx.asp, line 2. Cannot add object with apartment model behavior to the application intrinsic object.

Я нашел эту статью на (доброе старое) 4GuysFromRolla, но оно указывает на бесплатный компонент поиска Microsoft и бесплатный компонент словаря от Caprock Consulting - оба из которых мертвые ссылки.

В статье четко объясняется , почему вы не можете использовать Scripting.Dictionary в области приложения, но мне было интересно, знает ли кто-нибудь о бесплатной альтернативе или где я мог бы найти копия старых компонентов, упомянутых 4GuysFromRolla?

Ответы [ 3 ]

3 голосов
/ 16 июля 2009

Мне удалось загрузить компонент словаря от Caprock Consulting по этой ссылке: http://web.archive.org/web/20000619122506/http://www.caprockconsulting.com/data/CaprockDCT.zip

2 голосов
/ 10 августа 2009

У меня есть компонент LookupTable, и я могу предоставить его вам, если вы заинтересованы.

Однако я заметил, что вы можете использовать .NET HashTable в области приложения, которая может быть полезна для вас.

просто сделайте это:

<object id="YOUR_VAR_NAME" progid="System.Collections.HashTable" runat="Server" scope="Application"></object>

это даст вам глобальный, HashTable-объект всего приложения.

Остерегайтесь значительного изменения этого параметра, но у меня есть проблемы с утечками памяти, когда со временем обработка сессий приложений становится ненадежной (некорректно вызывает SessionStart)

1 голос
/ 21 августа 2009

У меня возникла та же проблема, и в итоге я заполнил переменную приложения содержимым моего словаря и добавил

    for each obj in application.Contents
        if Left(obj,6) = "urlLog" then
            application.Contents.Remove(obj)
        end if
    next

, чтобы убить все переменные приложения в global.asa на application.end (вы также можете использовать Application.Contents.RemoveAll, но я слышал, что есть проблема с тем, что из-за этой переменной остается какая-то переменная, вызывающая утечку памяти, даже если я не смог найти любой твердый источник, чтобы доказать это ...

В любом случае, словарь Caprock работает на вас?

...