Feed
Google+
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

BlogEngine.NET - Fehler beim ein- und ausschalten von Erweiterungen

by Roland Schumacher alias GENiALi 16. August 2010 -- 207 words  -- 1 mal gelesen

Wenn bei BlogEngine.NET eine Erweiterung aus- oder eingeschaltet wird kommt eine Meldung die einem mitteilt, dass auf die Web.config nicht geändert werden kann. Das kommt daher, dass der ExtensionManager versucht, bei einer Änderung des Status einer Erweiterung, das Blog neu zu starten. Versucht wird das in dem die Web.config geringfügig verändert wird. Bei einer Änderung der Web.config wird das Web automatisch neu gestartet.

Um den Fehler zu verhindern müsste man dem Account, unter dem das Web läuft, schreibrechte auf die Web.config geben. Wenn man einen eigenen IIS hat ist das kein Problem. Bei einem Shared Hosting geht das aber nicht immer. Ich kann z.B. auf den Dateien im root-Verzeichnis keine Rechte ändern. Die Web.config ist also immer schreibgeschützt für die Webanwendung. Dann kommt immer der Fehler.

Man kann das Web aber noch anders neu starten. Mit HttpRuntime.UnloadAppDomain(); erreicht man das selbe ohne die Fehlermeldung und gefühlt schneller. Angepasst werden muss folgendes.

In der ExtensionManager.cs:

public static void ChangeStatus(string extension, bool enabled)
{
    foreach (ManagedExtension x in _extensions)
    {
        if (x.Name == extension)
        {
            x.Enabled = enabled;
            BlogEngine.Core.DataStore.ExtensionSettings xs = new BlogEngine.Core.DataStore.ExtensionSettings(x.Name);
            xs.SaveSettings(x);
            SaveToCache();

            //string ConfigPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "Web.Config";
            //File.SetLastWriteTimeUtc(ConfigPath, DateTime.UtcNow);

            HttpRuntime.UnloadAppDomain();
            break;
        }
    }
}

Die Zeilen 12 und 13 werden auskommentiert. Die Zeile 15 ist neu und bewirkt ein neustarten der Webanwendung.

Tags: ,

Blog | Entwicklung

Kommentare (6) -

Philip
Philip Germany
16.08.2010 22:53:00 #

Wobei man anmerken sollte das HttpRuntime.UnloadAppDomain(); "Full-Trust" benötigt. Bei Blogs die bei irgendwelchen Hostern laufen ist der Weg über die web.config IMHO der einzige.

Antwort

klaus_b
klaus_b Germany
17.08.2010 07:31:04 #

Ich denke auch, dass für den Zugriff auf die AppDomain FullTrust benötigt wird.
Allerdings endet der Schreibzugriff auf die web.config meist auch in einem AccessDenied Fehler, der zwar abgefangen aber trotzdem unschön ist.
Servus,
Klaus

Antwort

GENiALi
GENiALi Switzerland
17.08.2010 07:56:27 #

Und jetzt habe ich extra in der Hilfe nachgeschaut. Dort steht nichts von FullTrust.
msdn.microsoft.com/.../...ime.unloadappdomain.aspx
Wie komme ich nun drauf dass das Teil FullTrust braucht?

Antwort

Philip
Philip Germany
17.08.2010 08:48:57 #

Ich weiß nicht ob das irgendwo dokumentiert ist, aber spätestens wenn´s knallt fragt man sich warum Smile
Rick Strahl hat mal einen netten Blogpost darüber geschrieben: http://www.west-wind.com/WebLog/posts/5688.aspx.

Philip

Antwort

GENiALi
GENiALi Switzerland
17.08.2010 08:59:58 #

Also zwei Methoden die nicht unbedingt funktionieren. Ob es eine gibt die wirklich tut?

Antwort

Nuls
Nuls Germany
06.09.2010 11:46:48 #

Danke - der Blogbeitrag hat mir gerade einige Kopfschmerzen gespart.. Wink

Antwort

Pingbacks and trackbacks (3)+

Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading

Statistik

Gesamte Posts: 1025
Dieses Jahr: 7
Diesen Monat: 1
Diese Woche: 0
Kommentare: 929
Total Bewertungen: 91
Ø Bewertung: 4,42
Meisten Kommentare
Google+ ... (28)
Beste Ø Bewertung
Tastaturlayout von Visual Stud ... (5)
Meiste Bewertungen
Windows 7 und die ersten Erfah ... (5)

Buttons

Stop Spam Harvesters, Join Project Honey Pot Benutzerprofil von GENiALi connection speed test network connection Bloggeramt.de Slug.ch Blog Verzeichnis und Blog Webkatalog Schumacher Roland Seitwert Valid XHTML 1.0 Transitional

writing