Является ли ASP.NET MVC 5 несовместимым с WebMatrix SimpleMembershipProvider?
У нас есть приложение, которое было построено на ASP.NET MVC 4 & Web API. Административные части сайта используют простое членство. Я заинтересован в обновлении приложения до MVC 5 / Web API 2, чтобы воспользоваться некоторыми новыми функциями, которые были добавлены. Но похоже, что они могут быть несовместимы.
В частности, после установки пакетов RC из NuGet в один из проектов в моем решении, иобновление информации web.config, приложение начинает умирать во время запуска на линии, которая вызываетWebSecurity.InitializeDatabaseConnection()
с этим исключением:
[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
Другие проекты в том же решении с использованием простого членства, которое у меня естьне модернизированный продолжать работать просто отлично.
Поиск в поисках дополнительной информации, конечно, приводит к большому количеству хитов для этого исключения, но ничего особенного для WebMatrix.
FWIW: я знаю, что Microsoft представила(еще один) членство и идентификация решения, но если нет способа использовать это с существующими таблицами простого членства или безболезненным путем миграции для всех наших существующих пользовательских данных, это на самом деле не вариант для нас.
ОБНОВЛЕНИЕ (11 октября)Я только что попробовал это снова с новой проверкой текущего ствола нашего приложения. Я использую Visual Studio 2012, но в остальном следовал инструкциям MS по обновлению существующего проекта. После обновления до MVC 5 / Web API 2 / EF 6 приложение запустилось и заработало очень хорошо.
Там не было никаких явных требований доверия вweb.config
удалять. Я добавил код изэтот вопрос вGlobal.asax.cs
и сообщает, что приложение работает с полным доверием (в IIS Express, только F5-ed от VS).
Повторно добавив тот же вызовInitializeDatabaseConnection()
, он начинает умирать с точно таким же исключением.
Пробуя решение в обновлении @ Kevin от пятницы, я обнаружил, что оно работает. Мне было действительно странно, что добавление этого явно не связанного пакета решило бы эти проблемы безопасности, и дажеБольше странно после того, как я удалил пакет из моего решения, и этопродолжал работать.
При более внимательном рассмотрении происходящего я понял, что причина, по которой это исправляет поведение, довольно проста:Microsoft.AspNet.WebHelpers
Пакет имеет две зависимости, которые были добавлены в мое решение:Microsoft.AspNet.WebPages.Data
а такжеMicrosoft.AspNet.WebPages.WebData
. Microsoft переместила классы WebMatrix в новые пакеты.
Поэтому добавленный пакет помощников устранил проблему не из-за того, что он делал, а из-за того, чтоэто приводило к добавлению обновленных версий сломанных сборок к моему решению. Решение первоначальной несовместимости заключается в установке этих новых пакетов при обновлении всего остального из NuGet:
Install-Package Microsoft.AspNet.WebPages.WebData
ОБНОВЛЕНИЕ (13 мая 2015 г.)Это былопредложил мне что вам также может понадобиться вручную установить второй новый пакет:
Install-Package Microsoft.AspNet.WebPages.Data
Этотне следует быть необходимым, потому что этот пакетявная зависимость из первых, и NuGet должен быть достаточно умен, чтобы установить оба. Но если вы получитеошибка при сборкеили не видите, как NuGet добавляет зависимость, это может вам помочь.