2011-04-04 3 views
2

Я отлаживаю эту Active X dll с помощью VB6 IDE. Я вижу, что выполнение доходит до попытки GetObjectContext. Этот метод всегда возвращает NOTHING.GetObjectContext ничего не возвращает в dll VB6 COM, вызванном из классического ASP

Это происходит на Windows 7 32 бит, IIS 7. (Приложение работает в других местах, один из которых является Windows Server 2008 с IIS 7)

Я гугле широко и нашел много ссылок на этот относящиеся к COM +, но в моем сценарии нет COM +. Просто старый сервер Server.CreateObject из зарегистрированной DLL.

У меня есть ASP код следующим

SET objCalendar = Server.CreateObject("SSYSDEV.Calendar") 
objCalendar.BuildCalendar("ADMINUSERS") 
SET objCalendar = Nothing 

Проблема линии запрошенной функции в DLL являются:

Dim objHttpRequest As ASPTypeLibrary.Request 
Set objHttpRequest = GetObjectContext.Item("Request") 

Любая помощь или предложения, как всегда, будет очень цениться.

Я все еще переживаю шок от необходимости работать с VB6 - я никогда не думал, что это произойдет! Это похоже на то, что его тянут обратно в темные века, очень грубо, что вызывает волдыри!

P.S. Я также создал компонент COM + и получил ASP таким образом объект, GetObjectContext возвращает пустой объект в этом случае, в котором нет объектов ASP. Так что это не поможет :-(

+0

Я обнаружил, что описанное выше поведение связано с тем, что COM + ведет себя по-другому в отладке, чем в противном случае. При отладке он всегда будет возвращать фиктивный контекст - в нем нет полезных объектов. Данное решение ограничивает решение AnthonyWJones ниже и отлично решает проблему. – RobD

ответ

2

Я знаю, что это немного поздно, но у меня была аналогичная проблема, и это решил для меня:

Тема: Проблема доступа запроса объекта с помощью COM +

http://forums.iis.net/t/1146404.aspx

Резюме: включить «Разрешить Внутренние свойства IIS "в компоненте COM +.

+0

Ах! Это очень полезно знать. Спасибо, Том. – RobD

+0

Это очень помогло! Большое спасибо! – Brandon

+1

Я знаю это еще немного позже, но только что выяснил, что это свойство недоступно в Windows 2003, но находится в Windows 2012. Спасибо, Том, эта проблема меня заводила (Яр!). –

2

Я обнаружил, что подход COM + к использованию компонентов VB6 в IIS является немного шелушащимся. Я добавляю это в класс VB6, который я хочу указать в ASP :: -

Private moScriptCtx As ScriptingContext 

Public Sub OnStartPage(SC As ScriptingContext) 

    Set moScriptCtx = SC 

End Sub 

Теперь вы можете получить доступ к запросу, Response, Server и т.д., как свойства moScriptCtx объекта.

вы могли бы быть интересны, как вы называете OnStartPage в первую очередь. вы не ASP автомагически делает это для вас во время выполнения CreateObject.

+0

Абсолютное волшебство! Спасибо! – RobD