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.
Entrambe possono accedere a database, utilizzare servizi e quant'altro. I problemi nascono nella necessità di dover usufruire, scambiare, leggere delle variabili Session e Application da entrambe le tecnologie.
Da ASP ad ASP.NET e ritorno
Come i più sanno, infatti, le variabili Session e Application di entrambe le tecnologie, non hanno nulla in comune se non il nome. Se scriviamo in una pagina ASP questo codice:
<% Session("variabile")="ciao" %>
E poi proviamo in una pagina ASP.NET presenta nella stessa cartella, a leggere tale variabile, non otterremo il risultato voluto:
<script language="vb" runat="server"> Sub Page_Load() Label1.Text=Session("variabile").ToString() End sub </script> <asp:label id="Label1" runat="server" />
Anzi, avremo un bell'errore, dato che tale variabile non è mai stata creata all'interno dello scope della web application:
Un trucco per raggirare il problema
Dunque, com'è facilmente intuibile, le variabili Session e Application di entrambe le tecnologie utilizzano zone di memoria all'interno del loro ambiente di esecuzione. Le variabili create dalle ASP saranno leggibili solo da questa tecnologia; quelle create dall'ASP.NET all'interno solo di questa 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)) end if end if if tipo="application" then if Application(name)="" then Response.Write(" ") else Response.Write(Application(name)) end if end if 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
Attenzione: Questo articolo contiene un allegato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.