Condividere le variabili Application e Session tra Classic ASP e ASP.NET

2 pagine in totale: [1] 2 Avanti >>

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:

Immagine

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

2 pagine in totale: [1] 2 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC