Accessing ASP objects from VB COM

I have created VB COM DLL & instancing it from ASP application.
Now I want to access ASP objects (Session, Application, Server) or site URL from VB COM function.
Is ther any way out for doing this
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.


How do I access the built-in ASP objects from VB?

When using IIS3 the only way to get a handle on the built-in ASP objects was via the ScriptingContext. When you use Server.CreateObject, ASP would call the OnStartPage method of your object and pass in a ScriptingContext object. Using that object you could then get a reference to the built-in ASP objects.

Private objScript As ScriptingContext
Sub OnStartPage(obj As ScriptingContext)
    Set objScript = obj
End Sub
Sub DoSomething()
Dim objResponse As ASPTypeLibrary.Response

    Set objResponse = objScript.Response
    objResponse.Write "<p>Hello World</p>"
End Sub

IIS4 and IIS5 provide this same functionality for backward compatibility but you shouldn't use it. Instead you should get a handle on the built-in objects using the object's ObjectContext. Objects created in ASP are given their own context and you can choose to hook into that context if you want to. In your VB Object Add a reference to COM+ Services Type Library if you are using Win2k , or to MTS if you are using Windows NT, and a reference to Microsoft Active Server Pages Object Library. Although we are adding a reference to MTS/COM+ you don't actually need to register the DLL with MTS, or register it as a configured component under Win2k. The reason being is that, under the covers, your scripts are running in the MTS environment anyway, we're just choosing to utilise it. If you do want to add your component to MTS/COM+ then that is fine too. The thing to note is that you can add the object to MTS or you can leave it as a normal DLL, using this technique does not restrict your deployment choices.

In our VB code the built-in ASP objects are held in the Items collection of the ObjectContext. Getting a handle on them is a simple matter of;

Dim objResponse As ASPTypeLibrary.Response
Set objResponse = GetObjectContext.Item("Response")

We can now use objResponse just as we would the Response object in ASP. Below is a small demo

ContextTest1.asp Code:

<%@ Language=VBScript %>

if len(trim(Session("FullName"))) > 0 then
      Response.Write "<p>I remember your name as " & Session("FullName") & "</p>"
end if

<FORM action="ContextTest2.asp" method=POST>
Surname: <input type="text" name="txtSurname"><br>
Forename: <input type="text" name="txtForename"><br>
<input type="submit" value="Submit">

ContextTest2.asp Code:

<%@ Language=VBScript %>
set obj = Server.CreateObject("ASPObject.ASPClass")
set obj = nothing

VB Code :

Create an ActiveX DLL project called ASPObject and add a class called ASPClass. Add a reference to MTS (if using Win NT) or COM+ Services Type Library (if using Win2k) and a reference to ASP (Microsoft Active Server Pages Object Library). Inside ASPClass put the following code.

Option Explicit

Public Sub DoStuff()
Dim objResponse As ASPTypeLibrary.Response
Dim objRequest As ASPTypeLibrary.Request
Dim objSession As ASPTypeLibrary.Session
Dim sSurname As String
Dim sForename As String
Dim sFullName As String
    Set objResponse = GetObjectContext.Item("Response")
    Set objRequest = GetObjectContext.Item("Request")
    Set objSession = GetObjectContext.Item("Session")
    objResponse.Write "<HTML>" & vbCrLf

    objResponse.Write "<HEAD>" & vbCrLf
    objResponse.Write "</HEAD>" & vbCrLf
    objResponse.Write "<BODY>" & vbCrLf

    sSurname = Trim(objRequest("txtSurname"))
    sForename = Trim(objRequest("txtForename"))

    If Len(sSurname) < 2 Then
        sSurname = UCase(sSurname)
        sSurname = UCase(Left(sSurname, 1)) & Mid(sSurname, 2)
    End If
    If Len(sForename) < 2 Then
        sForename = UCase(sForename)
        sForename = UCase(Left(sForename, 1)) & Mid(sForename, 2)
    End If
    sFullName = sForename & " " & sSurname
    objSession("FullName") = sFullName
    objResponse.Write "<p>Hello " & sFullName & "</p>" & vbCrLf
    If Len(Trim(objRequest.ServerVariables("HTTP_REFERER"))) > 0 Then
        objResponse.Write "<p><a href=""" & objRequest.ServerVariables("HTTP_REFERER") & """>Back</a>" & vbCrLf
    End If
    objResponse.Write "</BODY>" & vbCrLf
    objResponse.Write "</HTML>"

    Set objResponse = Nothing
    Set objRequest = Nothing
    Set objSession = Nothing

End Sub
i hope it may help you


Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Application Servers

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.