[Mono-list] Global.asax.cs problems; from Visual Studio .NET to Mono/XSP.
Roberto Jimeno
jimeno@servidor.unam.mx
28 Apr 2004 12:01:31 -0500
--=-OeYAnX2j7jnskvfuMhOg
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
Hi there!
I have some code generated using VS.NET. I tried to run that very same
code using Mono/XSP and I got an error 500
(System.NullReferenceException) from it. Apparenly this is due to a line
where `Application["ContadorAccesos"].ToString()' is consulted before it
is initialized.
The trick here is that `Application["ContadorAccessos"]' is actually
initialized in the Global.asax.cs file (set to zero on the method
"Application_Start" of class "Global". Somehow VS.NET executes the
initialization prior to the value being consulted, while Mono/XSP does
not.
I have tried stuff like compiling the files in different ways and under
different names; none of them with success. The latest command line I
used was "mcs Global.asax.cs AssemblyInfo.cs Session.aspx.cs
-r:System.Web -r:System.Drawing -r:System.Data -t:library -o
bin/Session.aspx.dll"
The stack trace is shown at the bottom of this message, and the four
related files are attached as well. I hope you can help me understand
how to use the Global.asax(.cs) file(s) and anything else I should know
in order to be able to deploy some of my VS.NET generated code using
Mono/XSP.
Thanks for your help.
Stack Trace:
System.NullReferenceException: Object reference not set to an instance
of an object
in <0x0003d> WebAppLatam.Session:Page_Load (object,System.EventArgs)
in <0x0005a> (wrapper delegate-invoke) System.MulticastDelegate:invoke_void_object_EventArgs (object,System.EventArgs)
in <0x00090> System.Web.UI.Control:OnLoad (System.EventArgs)
in <0x00033> System.Web.UI.Control:LoadRecursive ()
in <0x0018b> System.Web.UI.Page:InternalProcessRequest ()
in <0x0008d> System.Web.UI.Page:ProcessRequest (System.Web.HttpContext)
in <0x00327> ExecuteHandlerState:Execute ()
in <0x0007e> StateMachine:ExecuteState (System.Web.HttpApplication/IStateHandler,bool&)
--=-OeYAnX2j7jnskvfuMhOg
Content-Disposition: attachment; filename=Session.aspx
Content-Type: text/plain; name=Session.aspx; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
<%@ Page language=3D"c#" Codebehind=3D"Session.aspx.cs" AutoEventWireup=3D"=
false" Inherits=3D"WebAppLatam.Session" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Session</title>
<meta name=3D"GENERATOR" Content=3D"Microsoft Visual Studio .NET 7.1">
<meta name=3D"CODE_LANGUAGE" Content=3D"C#">
<meta name=3D"vs_defaultClientScript" content=3D"JavaScript">
<meta name=3D"vs_targetSchema" content=3D"http://schemas.microsoft.com/in=
tellisense/ie5">
</HEAD>
<body>
<form id=3D"Form1" method=3D"post" runat=3D"server">
<P><FONT color=3D"#6666ff" size=3D"5"><STRONG>Application y Session</STR=
ONG></FONT></P>
<P>Numero de accesos:
<asp:Label id=3D"lblContador" runat=3D"server"></asp:Label></P>
<P>
<asp:Button id=3D"btnContador" runat=3D"server" Text=3D"Incrementa el c=
ontador"></asp:Button></P>
<P><FONT color=3D"#cc66cc" size=3D"5"><STRONG>Autenticacion</STRONG></FO=
NT></P>
<P>Nombre:
<asp:TextBox id=3D"txtNombre" runat=3D"server"></asp:TextBox></P>
<P>Clave:
<asp:TextBox id=3D"txtClave" runat=3D"server"></asp:TextBox></P>
<P>
<asp:Button id=3D"btnCrea" runat=3D"server" Text=3D"Crear sesion"></asp=
:Button>
<asp:Button id=3D"btnLee" runat=3D"server" Text=3D"Leer sesion"></asp:B=
utton>
<asp:Button id=3D"btnAbandona" runat=3D"server" Text=3D"Abandonar sesio=
n"></asp:Button></P>
<P>
<asp:Label id=3D"lblSesion" runat=3D"server"></asp:Label></P>
<P>
<asp:HyperLink id=3D"HyperLink1" runat=3D"server" ImageUrl=3D"VerificaS=
ession.aspx">Verifica Sesion</asp:HyperLink></P>
<P> </P>
</form>
</body>
</HTML>
--=-OeYAnX2j7jnskvfuMhOg
Content-Disposition: attachment; filename=Session.aspx.cs
Content-Type: text/plain; name=Session.aspx.cs; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace WebAppLatam
{
/// <summary>
/// Descripci=F3n breve de Session.
/// </summary>
public class Session : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblContador;
protected System.Web.UI.WebControls.Button btnContador;
protected System.Web.UI.WebControls.TextBox txtNombre;
protected System.Web.UI.WebControls.TextBox txtClave;
protected System.Web.UI.WebControls.Button btnCrea;
protected System.Web.UI.WebControls.Button btnLee;
protected System.Web.UI.WebControls.Button btnAbandona;
protected System.Web.UI.WebControls.Label lblSesion;
protected System.Web.UI.WebControls.HyperLink HyperLink1;
private void Page_Load(object sender, System.EventArgs e)
{
//Console.WriteLine(Application["ContadorAccesos"].ToString());
// Introducir aqu=ED el c=F3digo de usuario para inicializar la p=E1gina
this.lblContador.Text =3D Application["ContadorAccesos"].ToString();
}
#region C=F3digo generado por el Dise=F1ador de Web Forms
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: llamada requerida por el Dise=F1ador de Web Forms ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
=09
/// <summary>
/// M=E9todo necesario para admitir el Dise=F1ador. No se puede modificar
/// el contenido del m=E9todo con el editor de c=F3digo.
/// </summary>
private void InitializeComponent()
{ =20
this.btnContador.Click +=3D new System.EventHandler(this.btnContador_Cli=
ck);
this.btnCrea.Click +=3D new System.EventHandler(this.btnCrea_Click);
this.btnLee.Click +=3D new System.EventHandler(this.btnLee_Click);
this.btnAbandona.Click +=3D new System.EventHandler(this.btnAbandona_Cli=
ck);
this.Load +=3D new System.EventHandler(this.Page_Load);
}
#endregion
private void btnContador_Click(object sender, System.EventArgs e)
{
Application.Lock();
Application["ContadorAccesos"] =3D Convert.ToInt64(Application["Contador=
Accesos"]) + 10;
Application.UnLock();
}
private void btnCrea_Click(object sender, System.EventArgs e)
{
if (this.txtNombre.Text !=3D "" || this.txtClave.Text !=3D "" )
Session["Usuario"] =3D this.txtNombre.Text;
Session["Clave"] =3D this.txtClave.Text;
this.lblSesion.Text =3D "Sesion creada con =E9xito !!!";
}
private void btnLee_Click(object sender, System.EventArgs e)
{
this.lblSesion.Text =3D "Session ID: " + Session.SessionID +
" - Usuario: " + Session["Usuario"] +=20
" - Clave: " + Session["Clave"];
}
private void btnAbandona_Click(object sender, System.EventArgs e)
{
Session.Abandon();
}
}
}
--=-OeYAnX2j7jnskvfuMhOg
Content-Disposition: attachment; filename=Global.asax.cs
Content-Type: text/plain; name=Global.asax.cs; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
namespace WebAppLatam
{
/// <summary>
/// Descripción breve de Global.
/// </summary>
public class Global : System.Web.HttpApplication
{
/// <summary>
/// Variable del diseñador requerida.
/// </summary>
private System.ComponentModel.IContainer components = null;
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
Application["ContadorAccesos"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
}
#region Código generado por el Diseñador de Web Forms
/// <summary>
/// Método necesario para admitir el Diseñador. No se puede modificar
/// el contenido del método con el editor de código.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}
#endregion
}
}
--=-OeYAnX2j7jnskvfuMhOg
Content-Disposition: attachment; filename=AssemblyInfo.cs
Content-Type: text/plain; name=AssemblyInfo.cs; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
using System.Reflection;
using System.Runtime.CompilerServices;
//
// La informaci=F3n general de un ensamblado se controla mediante el siguie=
nte=20
// conjunto de atributos. Cambie estos atributos para modificar la informac=
i=F3n
// asociada con un ensamblado.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] =09
//
// La informaci=F3n de versi=F3n de un ensamblado consta de los siguientes =
cuatro valores:
//
// Versi=F3n principal
// Versi=F3n secundaria=20
// Versi=F3n de compilaci=F3n
// Revisi=F3n
//
// Puede especificar todos los valores o usar los valores predeterminados (=
n=FAmero de versi=F3n de compilaci=F3n y de revisi=F3n)=20
// usando el s=EDmbolo '*' como se muestra a continuaci=F3n:
[assembly: AssemblyVersion("1.0.*")]
//
// Si desea firmar el ensamblado, debe especificar una clave para su uso. C=
onsulte la documentaci=F3n de=20
// Microsoft .NET Framework para obtener m=E1s informaci=F3n sobre la firma=
de ensamblados.
//
// Utilice los atributos siguientes para controlar qu=E9 clave desea utiliz=
ar para firmar.=20
//
// Notas:=20
// (*) Si no se especifica ninguna clave, el ensamblado no se firma.
// (*) KeyName se refiere a una clave instalada en el Proveedor de servic=
ios
// de cifrado (CSP) en el equipo. KeyFile se refiere a un archivo que=
contiene
// una clave.
// (*) Si se especifican los valores KeyFile y KeyName, tendr=E1=20
// lugar el siguiente proceso:
// (1) Si KeyName se puede encontrar en el CSP, se utilizar=E1 dicha =
clave.
// (2) Si KeyName no existe pero s=ED KeyFile, se instalar=E1=20
// y utilizar=E1 la clave de KeyFile en el CSP.
// (*) Para crear KeyFile, puede ejecutar la utilidad sn.exe (Strong Name=
).
// Cuando se especifica KeyFile, la ubicaci=F3n de KeyFile debe ser
// relativa al "directorio de resultados del proyecto". La ubicaci=
=F3n del directorio de resultados
// del proyecto depende de si se est=E1 trabajando con un proyecto W=
eb o local.
// En proyectos locales, el directorio de resultados del proyecto se=
define como
// <Directorio del proyecto>\obj\<Configuration>. Por ejemplo, si Key=
File
// se encuentra en el directorio del proyecto, el atributo AssemblyKe=
yFile se especifica=20
// como [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// En proyectos Web, el directorio de resultados del proyecto se def=
ine como
// %RUTA PRINCIPAL%\VSWebCache\<Nombre del equipo>\<Directorio del pr=
oyecto>\obj\<Configuraci=F3n>.
// (*) (*) Firma retardada es una opci=F3n avanzada; consulte la document=
aci=F3n de
// Microsoft .NET Framework para obtener m=E1s informaci=F3n.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
--=-OeYAnX2j7jnskvfuMhOg--