Programmeren in ASP.NET/Configuratiebestanden

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen

Alle instellingen in ASP.NET gebeuren met behulp van configuratiebestanden. Dit zijn allemaal tekstbestanden en er zijn er verschillende:

Naam Locatie Bedoeling Geldig voor
web.config in elke folder instellingen voor alle code in die folder de folder (en alle subfolders waar de instelling niet overschreven wordt)
global.asax rootfolder code om uit te voeren in events die gemeenschappelijk zijn voor de hele applicatie de gehele applicatie
machine.config binnen de Windows-folder instellingen voor de hele machine (server) alle applicaties op de machine

Het bestand machine.config wordt hier verder niet besproken. Let op als je daar wijzigingen aanbrengt, want een vergissing kan je server helemaal in de war brengen!

global.asax[bewerken]

In de root van elke webapplicatie kan je een bestand met de naam global.asax plaatsen. Dit bestand bevat de code voor events die gemeenschappelijk zijn voor alle bestanden van de applicatie.

Dit bestand kan er bijvoorbeeld zo uitzien:

global.asax

<%@ Application Language="VB" %>

<script runat="server">

    Sub Application_Start(Sender As Object, E As EventArgs)
	     Application("bezoekers")=0
    End Sub

    Sub Application_End(Sender As Object, E As EventArgs)
    End Sub

    Sub Session_Start(Sender As Object, E As EventArgs)
	    Application("bezoekers")=Application("bezoekers")+1
	    Session.LCID=2067
    End Sub

    Sub Session_End(Sender As Object, E As EventArgs)
	    Application("bezoekers")=Application("bezoekers")-1
    End Sub

</script>

Je merkt dat het bestand code bevat, met enkele subroutines. Deze subroutines hebben vaste namen, en het zijn eigenlijk events. Ze worden op bepaalde momenten automatisch opgeroepen door de applicatie.

In de lijst hieronder vind je enkele van de beschikbare event procedures:

Event procedures in Global.asax

Event Procedure Beschrijving
Application_Start Wordt uitgevoerd wanneer de toepassing start op de server. Dit event kan maar één maal opgeroepen worden.
Application_End Wordt uitgevoerd wanneer de toepassing beëindigd wordt. Wordt gebruikt om indien nodig op te ruimen.
Application_Error Wordt uitgevoerd wanneer een fout optreedt in de toepassing
Session_Start Wordt uitgevoerd wanneer een nieuwe gebruiker op de website binnenkomt
Session_End Wordt uitgevoerd wanneer een gebruikerssessie afgesloten wordt door de gebruiker of door een time-out
Application_AuthenticateRequest Wordt uitgevoerd wanneer een beveiligingsmodule de identiteit van de gebruiker vaststelt
Application_AuthorizeRequest Wordt uitgevoerd wanneer een beveiligingsmodule de gebruikersrechten controleert
Application_BeginRequest Wordt uitgevoerd wanneer ASP.NET start met het verwerken van een request, vooraleer het andere per-request-events verwerkt
Application_Disposed Wordt uitgevoerd wanneer ASP.NET de uitvoering voltooit bij het beantwoorden van een request
Application_EndRequest Wordt uitgevoerd als laatste event na het verwerken van een request na alle andere pre-request-events
Application_PreSendRequestContent Wordt uitgevoerd net voor ASP.NET inhoud naar de client stuurt
Application_PreSendRequestHeaders Wordt uitgevoerd net voor ASP.NET HTTP headers naar de client stuurt

Geen enkele van deze events is verplicht. Als je ze niet declareert, dan wordt het event gewoon zonder meer uitgevoerd.

web.config[bewerken]

Een tweede manier om je website in te stellen is via een speciaal bestand in je website, web.config. Dit is een XML-bestand waarin alle instellingen staan die van belang zijn voor je website. Je hoeft dus geen instellingen te doen in de webserver zelf (zoals onder andere bij ASP het geval is). Omdat het een XML-bestand is, kan je het gewoon met Notepad wijzigen.

Voorbeelden van instellingen zijn:

  • waarden geven aan constanten die in meerdere pagina's gebruikt worden
  • connectiestrengen instellen
  • eigen 404-foutpagina's
  • aanmelding
  • taalinstellingen
  • gebruikersrechten
  • compilatie-opties
  • tracing
  • debugging
  • enz...

Als je in Visual Studio een web.config-bestand maakt (door daarvoor te kiezen in het New File venster), dan krijg je een bestand met daarin al een hoop uitleg over de verschillende onderdelen van het bestand en de belangrijkste instellingen die je kunt doen.

ASP.NET voorziet een veilige manier om web.config te wijzigen. Ga naar Control Panel-Administrative Tools-Internet Information Services (de configuratie van IIS), rechts-klik op je applicatie en kies properties. Onder de klep “ASP.NET” kan je via “Edit configuration” de instellingen wijzigen.

Op je eigen pc kan je sommige instellingen ook vanuit Visual Studio aanpassen. Kies in het menu Website-ASP.NET configuration-Application.

Alle opties die in een website niet ingesteld zijn worden automatisch overgenomen uit een centrale configuratie voor alle websites op de computer, machine.config. Systeembeheerders kunnen dat bestand eventueel aanpassen om de basisconfiguratie van alle websites aan te passen, en sommige mogelijkheden voor afzonderlijke websites te verbieden.

Structuur[bewerken]

De root van het XML-bestand is de <configuration>-tag. De basisstructuur voor een web.config bestand zie je hieronder.

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

  <connectionStrings>
     <add name="string1" connectionString="waarde"
            providerName="System.Data.SqlClient" />
     <!--meer...-->
  </connectionStrings>

  <appSettings>
     <add key="naam" value="waarde"/>
     <!--meer...-->
  </appSettings>

  <system.web>
     <!--hier website instellingen-->
  </system.web>

</configuration>

De configuratie voor een website bestaat in feite uit drie delen, <connectionStrings>, <appSettings> en <system.web>. Het <connectionStrings>-element geeft de mogelijkheid om connectiestrings in te stellen voor de hele web site. Hierin kan je strings toevoegen door de <add ... /> tag te gebruiken.

Zo kun je bijvoorbeeld de verbindingsstreng voor de database hierin opslaan, zoals ook in het voorbeeld in de web.config die Visual Studio maakt.

<connectionStrings>
   <add name="connString" 
        connectionString="Provider=Microsoft.Jet.OLEDB.4.0;blablabla" 
        providerName="System.Data.OleDb" />
</connectionStrings>

Als je deze wilt gebruiken in een pagina, kan je ze met de volgende code opvragen en in een variabele plaatsen:

Dim strAdres As String = ConfigurationManager.ConnectionStrings("connString").ConnectionString

Declaratief kan je ze ook opvragen:

ConnectionString="<%$ ConnectionStrings:connString %>"

Het <appSettings>- element geeft de mogelijkheid om waardes of instellingen in de website beschikbaar te maken onder bepaalde namen voor de hele folder. Hierin kan je instellingen toevoegen door de <add ... /> tag te gebruiken.

Zo kun je bijvoorbeeld het e-mail-adres van de administrator instellen:

<appSettings>
   <add key="adresAdmin" value="admin@mijnsite.be" />
</appSettings>

Als je dit adres wilt gebruiken in een pagina, kan je dit met de volgende code opvragen en in een variabele plaatsen: Dim strAdres As String = ConfigurationManager.AppSettings("adresAdmin")

Declaratief kan je het ook opvragen:

Text="<%$ AppSettings:adresAdmin %>"

Het voordeel hiervan is natuurlijk dat je deze instelling maar op één plaats moet wijzigen, maar dat de wijziging ineens voor alle pagina's geldt. De pagina's moeten zelfs niet opnieuw gecompileerd worden, ze halen de nieuwe waarde automatisch op. Het gedeelte <system.web> bevat de daadwerkelijke instellingen van de website. Voor de verschillende instellingen zijn er aparte elementen die alleen bepaalde waardes kunnen hebben. Wijzigingen in web.config worden opgepikt zodra de eerstvolgende pagina opgevraagd wordt.

Opmerkingen

  • Elke wijziging in web.config doet de applicatie herstarten. Dit betekent onder andere dat op dat moment alle gebruikers hun Session-instellingen verliezen.
  • Zoals alle XML-bestanden is web.config hoofdlettergevoelig.
  • Zoals bij alle XML-bestanden heeft witte ruimte geen belang.

Voor meer informatie over deze instellingen: http://msdn.microsoft.com/library/en-us/cpguide/html/cpconaspnetconfiguration.asp Een volledige beschrijving van alle elementen die mogelijk zijn vind je hier: http://msdn.microsoft.com/library/en-us/cpgenref/html/gngrfaspnetconfigurationsectionschema.asp.

Delen van een website instellen[bewerken]

Bepaalde instellingen die je met web.config kan doen kan je ook toepassen op slechts een deel van de website. In iedere subfolder van de website kan je een web.config bestand plaatsen met daarin instellingen voor die subfolder. Instellingen die niet gemaakt worden in die subfolder, worden overgenomen van de instellingen die gelden voor een folder hoger. Je kunt dus voor iedere subfolder in de website bepaalde instellingen overschrijven. Een voorbeeld hiervan zie je hier: http://www.microsoft.com/netherlands/msdn/aspnet/security.asp. Bovendien kan je sommige instellingen ook nog eens per pagina overschrijven. Dit doe je dan in het Page-directief van die pagina. Deze instellingen hebben dus voorrang op de instellingen in web.config.

Dit is de orde van voorrang (hoe meer naar rechts hoe meer voorrang): machine.config -> web.config root -> web.config subfolder -> Page-directief

Let er wel op dat sommige instellingen alleen in web.config van de rootfolder gedaan kunnen worden (zoals bv. het soort authenticatie). Je krijgt een foutmelding als je deze instelling toch in een submap van de website probeert te gebruiken.

Een virtuele map maken[bewerken]

Binnen IIS (Internet Information Server) kan je virtuele directory's aanmaken. Een virtuele directory werkt als een snelkoppeling naar een bepaalde folder (die zelfs niet binnen wwwroot hoeft te staan). Bovendien kan je in IIS vele instellingen (zoals beveiliging, default document, enz...) per virtuele directory instellen.

Voorbeeld:

  • Maak in de map My Documents een map om je ASPX-bestanden in te zetten, bijvoorbeeld MijnASP.
  • Open Control Panel-Administrative Tools-Internet Information Services
  • Selecteer het snelmenu van de default Web Site en kies New, Virtual Directory. De Virtual Directory Creation Wizard start op.
  • Geef als alias "virtueel" en blader naar de folder MijnASP op je harde schijf. Selecteer de Read- en Script-permissons
  • Kopieer een testbestand test.aspx in MijnASP
  • Open je browser en typ in: http://localhost/virtueel/test.aspx
  • Als het goed is zie je de pagina.

Normaal gezien kan je webserver alleen pagina's tonen die binnen wwwroot staan, maar dankzij de virtuele directory zijn andere folders ook te bereiken (bijvoorbeeld bestanden die in My Documents staan).

Merk op dat de echte folder MijnASP heet, maar in de URL moet je de alias "virtueel" gebruiken! Je zou ook een folder "virtueel2" kunnen maken binnen wwwroot, en die dan ook nog eens instellen als virtuele folder "virtueel2". De virtuele directory verwijst dan niet naar een andere folder, maar het voordeel is dat die folder zijn eigen instellingen kan hebben binnen de website. Soms is dit nodig. Als het geen virtuele folder is, neemt de folder de instellingen over van de "default website" in IIS.

De website overzetten op de productieserver[bewerken]

Het overzetten van je website van de ontwikkelserver naar de productieserver is heel eenvoudig. Het enige dat je moet doen is alle bestanden die je gemaakt hebt kopiëren naar de productieserver. Je kan dit doen met FTP. Je moet ook alle submappen (bin, images, enz...) kopiëren naar dezelfde submappen op de server (men noemt dit ook wel de XCOPY-overdracht).

Let op: databanken zoals MSDE en SQL Server 2000 bewaren hun bestanden apart, niet binnen de gewone wwwroot. Je kan deze bestanden niet gewoon kopiëren. Deze databanken moet je zelf aanmaken (of laten aanmaken) op de productieserver met behulp van SQL-commando's. Volg daarvoor de instructies van de hostingfirma. SQL Server 2005 ondersteunt wel de XCOPY-overdracht.


Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.