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 = NothingAttenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Galleria fotografica dinamica con ASP.NET AJAX
- Usare Search come un servizio nei tuoi siti e nei tuoi client
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
- Realizzare un custom extender AJAX con ASP.NET 3.5
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008
- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
