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.
Approfondimenti
Supportare l'autenticazione basata su API Key in ASP.NET Core
Ottimizzare l'utilizzo della CPU in ASP.NET Core con MiniProfiler
Migrare un'application ASP.NET Core 2.1 alla versione 2.2
Implementare un blocco territoriale in ASP.NET Core
Utilizzare un endpoint ASP.NET Web API come data source protetta in Excel o Power BI
Utilizzare servizi applicativi durante la validazione in ASP.NET Core
Sfruttare la dependency injection in un Filter di ASP.NET Core
Semplificare la gestione degli array in querystring in ASP.NET Core
Personalizzazioni avanzate del parsing della richiesta in ASP.NET Core
Diagnosticare i problemi di performance con MiniProfiler su ASP.NET Core MVC
Sfruttare HTTP2 con IIS e Kestrel in ASP.NET Core
Portare un progetto da ASP.NET Core 2.2 a 3.0