Inloggen
 
 
 
 
    
Dotnetnuke als 'root-website' met daaronder ASP.NET webapplicaties geven fout
Location: BlogsFerry Onderwater - Developer    
Posted by: Ferry Onderwater 26-5-2006 0:00
Na het wijzigen van een website in een DNN-site geven twee applicaties in onderliggende virtual directories problemen (errormelding op het scherm bij aanroepen). Dit blog legt uit waarom en hoe het opgelost is.
Oude situatie: We hebben een webserver (IIS6) waarop een website draait (ASP.NET 1.1). Onder deze website zijn een tweetal virtual directories gedefinieerd, één draaiende onder ASP.NET 1.1 en één onder ASP.NET 2.0. Alle drie (website en beide virtual directories) geven geen problemen.

Nieuwe situatie: De website is vervangen door een DotNetNuke 3.2.2 installatie. Beide originele virtual directories zijn gescript en geïnstalleerd onder onze nieuwe DNN 3.2.2 website.
De DNN site draait, beide vd's niet meer.

Het eerste probleem dat we tegenkomen is een foutmelding bij het aanroepen van één van de vd's (willekeurig welke):

Could not load file or assembly 'DotNetNuke.HttpModules.UrlRewrite' or one of its dependencies. The system cannot find the file specified.

In onze applicatie web.config hebben we niets gedefinieerd dat verwijst naar DotNetNuke, dit is alleen te vinden in de 'host' website. Het blijkt dat de configs in de volgende volgorde worden ingelezen en verwerkt:

1. machine.config
2. wwwroot
3. vitual folder
4. sub folder
5. sub sub folder

Dit is dus geen specifiek DNN probleem, maar heeft te maken met de architectuur van ASP.NET en kan dus bij elke applicatie welke in een vd draait optreden!
We moeten dus op de een of andere manier de DNN verwijzingen 'verwijderen'. Dit kunnen we doen door in onze web.config de volgende statements op te nemen (tussen de <system.web> tags):

ASP.NET 2.0
Code:
<httpModules>
  <clear/>
</httpModules>
<httpHandlers>
  <remove verb="GET" path="FtbWebResource.axd" />
</httpHandlers>
<pages>
  <namespaces>
   <remove namespace="DotNetNuke.Services.Localization"/>
   <remove namespace="DotNetNuke.Entities.Users"/>
   <remove namespace="DotNetNuke"/>
   <remove namespace="DotNetNuke.Common"/>
   <remove namespace="DotNetNuke.Data"/>
   <remove namespace="DotNetNuke.Framework"/>
   <remove namespace="DotNetNuke.Modules"/>
   <remove namespace="DotNetNuke.Security"/>
   <remove namespace="DotNetNuke.Services"/>
   <remove namespace="DotNetNuke.UI"/>
   <remove namespace="DotNetNuke.Entities.Portals"/>
   <remove namespace="DotNetNuke.Common.Utilities"/>
   <remove namespace="DotNetNuke.Services.Exceptions"/>
   <remove namespace="DotNetNuke.Entities.Tabs"/>
  </namespaces>
</pages>
<profile enabled="false" >
  <providers>
  <clear/>
  </providers>
</profile>


ASP.NET 1.1
Code:
<httpModules>
  <clear/>
</httpModules>
<httpHandlers>
  <remove verb="GET" path="FtbWebResource.axd" />
</httpHandlers>


Op het moment dat we gaan testen blijkt de ene applicatie te werken (de ASP2.0 applicatie), de andere geeft nog steeds een foutmelding, echter wel een andere:

Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive

Dit blijkt veroorzaakt te worden door het 'clearen' van de <httpModules>.

We zetten de volgende statements in de web.config:

Code:
   <httpModules>
        <clear/>
    <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
    </httpModules>


Nu werkt ook de applicatie welke gebruik maakt van session-state goed. Op het moment dat de andere applicatie ook sessievariabelen had gebruikt hadden we deze fout daar ook gehad.
Wellicht is het dus te prefereren geen <clear> te gebruiken maar alle DNN-modules (of zowiezo specifieke modules uit de bovenliggende hierarchie) per stuk te verwijderen (<remove>Wink zodat de standaard declaraties intact blijven.

Al zoekende kwam ik trouwens ook een alternatieve oplossing tegen:

Creeer een 'lege' website. Maak hieronder drie virtual directories. In één daarvan installeer je DNN, in de andere twee onze applicaties. Binnen IIS laat je de 'lege websíte' doorverwijzen naar onze virtual directory en voila.
Copyright ©2006 Ferry Onderwater
Permalink |  Trackback
  
 
Weblogs
    
Archief
    
Zoeken
    
 
 
 
 
Copyright 2006-2009 by Arcencus
Privacy Statement | Terms Of Use