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

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

Fabrizio Cannatelli

Autore e Founder di Informarea, sono un appassionato di informatica e tecnologia da sempre. La voglia di comunicare e di condividere sul Web le mie curiosità e le mie conoscenze, mi ha spinto a lanciarmi nel progetto di questo sito. Nato un po' per gioco e un po' per passione, oggi è diventato una grande realtà.

Fabrizio Cannatelli

Approfondimenti