Wir haben eine vorhandene Anwendung, die auf ASP.NET MVC 4 & Web API erstellt wurde. Die Admin-Teile der Site verwenden die einfache Mitgliedschaft. Ich bin daran interessiert, die Anwendung auf MVC 5 / Web API 2 zu aktualisieren, um einige der neuen Funktionen zu nutzen, die hinzugefügt wurden. Aber es sieht so aus, als wären sie möglicherweise nicht kompatibel.
Insbesondere nach der Installation der RC-Pakete von NuGet in einem der Projekte in meiner Lösung und der Aktualisierung der web.config-Informationen beginnt die Anwendung beim Start auf der aufrufenden Leitung zu sterben WebSecurity.InitializeDatabaseConnection()
, mit der folgenden Ausnahme:
[MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.]
WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70
WebMatrix.Data.Database.OnConnectionOpened() +70
WebMatrix.Data.Database.EnsureConnectionOpen() +51
WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13
WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +206
WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +87
Andere Projekte in derselben Lösung mit Simple Membership, die ich nicht aktualisiert habe, funktionieren weiterhin einwandfrei.
Wenn Sie nach weiteren Informationen suchen, werden natürlich viele Treffer für diese Ausnahme angezeigt, aber nichts Besonderes für WebMatrix.
FWIW: Ich weiß, dass Microsoft eine (weitere) Mitgliedschafts- und Identitätslösung eingeführt hat , aber es sei denn, es gibt eine Möglichkeit, diese mit den vorhandenen Simple Membership-Tabellen oder einem nahtlosen Migrationspfad für alle vorhandenen Benutzerdaten zu verwenden, ist dies keine Option für uns.
UPDATE (11. Oktober)
Ich habe es gerade noch einmal versucht, indem ich den aktuellen Trunk unserer App neu ausgecheckt habe. Ich verwende Visual Studio 2012, habe aber ansonsten die Anweisungen von MS zum Aktualisieren eines vorhandenen Projekts befolgt. Nach dem Update auf MVC 5 / Web API 2 / EF 6 wurde die App gestartet und lief einwandfrei.
Es gab keine expliziten Vertrauensanforderungen in der web.config
zu entfernenden. Ich habe den Code von dieser Frage zu Global.asax.cs
, und es meldet , dass der App mit vollem Vertrauen läuft (in IIS Express, nur F5-ed aus VS).
Wenn Sie denselben Anruf erneut hinzufügen InitializeDatabaseConnection()
, beginnt er mit genau derselben Ausnahme zu sterben.
LÖSUNG (28. Oktober)
Als ich die Lösung in @ Kevins Update vom Freitag ausprobierte, stellte ich fest, dass sie funktioniert. Es war wirklich seltsam für mich , dass das Hinzufügen dieses scheinbar unzusammenhängende Pakets dieser Sicherheitsprobleme lösen würde, und noch mehr seltsam , nachdem ich das Paket aus meiner Lösung entfernt, und es arbeitet weiter .
Bei genauerem Hinsehen wurde mir klar, dass der Grund, warum dies das Verhalten behebt, recht einfach ist: Das Microsoft.AspNet.WebHelpers
Paket enthält zwei Abhängigkeiten, die meiner Lösung hinzugefügt wurden: Microsoft.AspNet.WebPages.Data
und Microsoft.AspNet.WebPages.WebData
. Microsoft hat die WebMatrix-Klassen in neue Pakete verschoben.
Das hinzugefügte Hilfspaket behebt das Problem also nicht aufgrund von Aktivitäten, sondern weil es dazu führte, dass aktualisierte Versionen der defekten Assemblys zu meiner Lösung hinzugefügt wurden . Die Lösung für die anfängliche Inkompatibilität besteht also darin, diese neuen Pakete zu installieren, wenn Sie alles andere von NuGet aktualisieren:
Install-Package Microsoft.AspNet.WebPages.WebData
UPDATE (13. Mai 2015)
Mir wurde vorgeschlagen, dass Sie möglicherweise auch das zweite neue Paket manuell installieren müssen:
Install-Package Microsoft.AspNet.WebPages.Data
Dies sollte nicht erforderlich sein, da dieses Paket eine explizite Abhängigkeit vom ersten ist und NuGet intelligent genug sein sollte, um beide zu installieren. Wenn beim Erstellen jedoch eine Fehlermeldung angezeigt wird oder NuGet die Abhängigkeit nicht hinzufügt, kann dies hilfreich sein.