Come condividere le variabili Application e Session tra Asp e Asp.net
La convivenza tra le ASP tradizionali e ASP.NET non crea problemi sui server Microsoft dalla versione 2000.
E’ sufficiente abilitare il supporto per le ASP e installare il .NET Framework per poter usufruire di entrambe le tecnologie nelle proprie web application.
I problemi nascono nella necessità di dover usufruire, scambiare, leggere delle variabili Session e Application da entrambe le tecnologie.
Come condividere le variabili Application e Session tra Asp e Asp.net
Le variabili di entrambe le tecnologie utilizzano zone di memoria all’interno del loro ambiente di esecuzione e non hanno nulla in comune se non il nome, infatti le variabili create da ASP saranno leggibili solo da questa tecnologia mentre quelle create da ASP.NET saranno visibili solo all’interno di questo ambiente. Come possiamo risolvere la cosa?
Il trucco, banale ma funzionale, c’è: è sufficiente richiedere da una pagina ASP.NET una pagina ASP per leggere il contenuto di una variabile Session e Application di quell’ambiente, e viceversa per poter leggere dalle ASP gli oggetti presente nelle pagine .NET.
Proviamo a leggere una variabile Application presente nell’ambiente ASP tradizionale da una pagina ASP.NET. Iniziamo a scrivere una pagina ASP contenente questo codice dandogli il nome “ReadAsp.asp”:
<%
on error resume next
tipo=request(“type”)
name=request(“name”)
if tipo=”session” then
if Session(name)=”” then
Response.Write(“”)
else
Response.Write (Session(name))
endif
endif
if tipo=”application” then
ifApplication(name)=”” then
Response.Write(“”)
else
Response.Write(Application(name))
endif
endif
Response.End()
%>
Questo codice, che è anche quello presente nell’esempio allegato a questo articoli, una volta richiamato controlla che tipo di variabile si vuole leggere e il suo nome, quindi la visualizza con un banale Response.Write. Per esempio, per leggere visualizzare il contenuto della variabile Application “esempio”, ci è sufficiente richiamare tale pagina con i parametri voluti:
<a href=”http://localhost/ReadAsp.asp?type=Application&name=esempio”>
http://localhost/ReadAsp.asp?type=Application&name=esempio</a>
Dalla nostra pagina ASP.NET è sufficiente utilizzare la tecnica denominata “URL grabbing” per richiamare quella pagina ASP e prenderne il contenuto. Se dalla nostra pagina ASP.NET vogliamo leggere il contenuto della variabile Application “esempio” utilizzata in ASP, possiamo scrivere:
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(“http://localhost/ReadAsp.Asp?type=Application&name=esempio”);
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader sr = new StreamReader(myResponse.GetResponseStream());
contenuto_variabile=sr.ReadToEnd();
Semplice, no? Per fare la stessa cosa ma da una pagina ASP, dobbiamo scrivere una pagina ASP.NET di nome “ReadNet.aspx” con questo contenuto:
<%@ Page language=”c#” %>
<script runat=server>
void Page_Load() {
string name=Request[“name”];
string tipo=Request[“type”];
if (tipo==”session”)
{
if (Session[name]==null) Response.Write (“”);
else
Response.Write (Session[name].ToString());
}
if (tipo==”application”)
{
if (Application[name]==null) Response.Write (“”);
else
Response.Write (Application[name].ToString());
}
}
</script>
Quindi, per prendere il contenuto di una variabile Application utilizzata nell’ambiente .NET da una nostra pagina ASP:
Dim objXMLHTTP, StrURL
StrURL = “http://localhost/ReadNet.aspx?type=application&name=esempio”
Set objXMLHTTP = Server.CreateObject(“MSXML2.ServerXMLHTTP”)
objXMLHTTP.Open “GET”, StrURL, false
StrCookie = Request.ServerVariables(“HTTP_COOKIE”) ‘ <- queste due righe verranno spiegate di seguito
objXMLHTTP.setRequestHeader “COOKIE”, StrCookie ‘ < …
objXMLHTTP.Send
contenuto_application=CStr(objXMLHTTP.ResponseText)
Set xml = Nothing