Global.asax ohne Code-Behind

25. Juli 2006
Zur Realisierung von ernsthaften Webanwendungen sollte man eigentlich immer das Code-Behind Modell vorziehen, anstatt den Code direkt in eine aspx Seite zu kodieren. Allerdings habe ich nicht schlecht gestaunt, als ich für eine neue Anwendung in Visual Studio eine Global.asax anlegen wollte: Es wird heifür immer Inline-Code verwendet. Auch gibt es keine Option beim Anlegen der Global.asax, um eine Code-Behind zu erzeugen. Abhilfe: manuelles Hinzufügen der entsprechenden Code-Behind Datei:

1.
<%@ Application Language="C#" Inherits="Global" %>
zur Global.asax hinzufügen. Alles andere rauskopieren.

2. Im App_Code Ordner eine Klasse Global.cs anlegen

3. In Global.cs die Klassendefinition ändern:
public partial class Global : System.Web.HttpApplication

4. Die folgenden Methoden zur Global.cs hinzufügen:
    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
    }
    void Application_End(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown
    }
    void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs
    }
    void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started
    }
    void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends.
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer
        // or SQLServer, the event is not raised.
    }

Siehe auch Ross W Nelson's Blog: Fixing the Global.asax in ASP.NET 2.0

ASP.NET

Modales Popup in ASP.NET

24. Juli 2006

Ein modales Popup in ASP.NET zu erzeugen ist nicht schwer, aber umständlich. Leider! Hier eine kleine Anleitung:

Der erste Schritt ist ein Javascript zum Öffnen eines Popups:

function openPopup(url, title) {
  width = 860;
  height = 360;
  posx = window.screenLeft + posx;
  posy = window.screenTop + posy;

  var Fenster;
    
  if (window.showModalDialog){
    var features = "dialogWidth:" + width + "px;dialogHeight:" + height +
      "px;resizable:no;scroll:no;status:no;edge:sunken;help:no;center:yes";
    Fenster = window.showModalDialog(url, title, features);
  } else {
    var features = "locationbar=no, directories=no, status=no, " +
      "menubar=no, scrollbars=no, resizable=no, modal=yes, dependent=yes, width=" +
      width + ",height=" + height + ",left=" + posx + ",top=" + posy;
    Fenster = window.open( url, title, features);
    Fenster.focus();
  }
}

 

Damit die Inhalte des Popups auch korrekt angezeigt werden (werden sonst gecacht), muss das Page_Load des Popups angepasst werden:

protected void Page_Load(object sender, EventArgs e) {
  if (!this.IsPostBack) {
    Response.Expires = 0;
    Response.Cache.SetNoStore();
    Response.AppendHeader("Pragma", "no-cache");
  }
}

.NET, ASP.NET

Blank Page bei Response.Redirect in ASP.NET 1.1

27. Februar 2006
Wenn der Befehl Response.Redirect in ASP.NET in Verbindung mit Smart Navigation, statt der gewünschten Seite nur eine leere Seite anzeigt, dann einfach mal kontrollieren, ob der Ordner aspnet_client im Rootverzeichnis der Webseite existiert. Falls nicht, aspnet_regiis.exe auf dem entsprechenden Webserver ausführen.

Development, ASP.NET

Images in App_GlobalResources

15. Februar 2006

Mit ASP.NET 2.0 halten eine Menge neue Ordner Einzug in Webprojekte. Der scheinbar interessante Ordner App_GlobalResources sollte allerdings nicht zur Ablage von Images (jpeg, gif, etc.) verwendet werden. Dies funktioniert zwar in Visual Studio 2005 samt Anzeige wunderbar, doch im Webbrowser werden die Images nicht angezeigt, denn der IIS schützt den Ordner App_GlobalResources (und App_LocalResources) vom Download. In diesen Ordnern sollten nur Dateien abgelegt werden, die auf dem Server verarbeitet werden (z.B. resx-Dateien).

Development, ASP.NET

Visual Studio Edit&Continue mit ASP.NET

17. Januar 2006

Überall wird die neue Debugging Funktion "Edit&Continue" von Visual Studio 2005 hochgehalten. Doch leider wird verschwiegen, dass diese Funktion nicht bei ASP.NET zur Verfügung steht! Schade, wäre das doch eine deutlicher Geschwindigkeitsvorteil bei der Entwicklung von Webanwendungen.

ASP.NET

ASP.NET langsam unter Windows 2000

19. Dezember 2005

Nach dem Kopieren einer ASP.NET 1.1 Webanwendung von einem Windows 2003 (Entwicklung) auf einen Windows 2000 Server (Produktion) tat sich plötzlich eine sehr starke Performance Bremse auf: Jeder Zugriff auf eine Seite dauerte min. 5-7 Sekunden, egal wie einfach oder komplex die Seite war. Es sah wirklich wie ein Timeout-Problem aus. Alle anderen Anwendungen auf dem Server liefen ohne jeglichen Probleme.

Nach einigem Suchen und Debuggen fand ich die Lösung: Windows 2000 hat anscheinend Probleme mit der Auflösung von Gruppen für die Berechtigungskonfiguration im Active Directory. Die Möglichkeit in der Web.Config das Authorization Tag zu nutzen scheint nicht empfehlenswert zu sein für Windows 2000:


<authorization>
  <allow roles="GLOBAL\SW-Entwickler-Rolle,GLOBAL\APDB-User>
  <deny users="?" />
</authorization>

Es sollte die Default Einstellung gewählt werden:


<authorization>
  <allow users="*">
  <deny users="?" />
</authorization>

Um sicher zu stellen, das nur authorisierte Anwender auf die Anwendung zugreifen können, habe ich NTFS Berechtigungen auf die entsprechenden Verzeichnisse der Webanwendung vergeben.

ASP.NET