Подтвердить что ты не робот

Метод WebSecurity.InitializeDatabaseConnection можно вызывать только один раз

Я пытаюсь использовать Windows Azure для размещения веб-приложения MVC4. Я создал тестовое приложение, используя шаблон интернет-приложения VS2012 MVC4 и добавил к нему пользовательскую модель и контроллер.

Я опубликовал его на Azure и смог получить миграцию "update-database" в базу данных Azure.

Когда я пытаюсь использовать приложение локально, но используя базу данных Azure SQL, он отлично работает. Я могу войти/зарегистрироваться и использовать мой тестовый контроллер.

Когда я пытаюсь использовать приложение онлайн, я могу использовать тестовый контроллер, но логин или регистрация ссылок дают следующее исключение:

Server Error in '/' Application.

The "WebSecurity.InitializeDatabaseConnection" method can be called only once.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The "WebSecurity.InitializeDatabaseConnection" method can be called only once.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[InvalidOperationException: The "WebSecurity.InitializeDatabaseConnection" method can be called only once.]
   WebMatrix.WebData.WebSecurity.InitializeMembershipProvider(SimpleMembershipProvider simpleMembership, DatabaseConnectionInfo connect, String userTableName, String userIdColumn, String userNameColumn, Boolean createTables) +123
   WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo connect, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables) +51
   WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String connectionStringName, String userTableName, String userIdColumn, String userNameColumn, Boolean autoCreateTables) +52
   MembershipTest2.Filters.SimpleMembershipInitializer..ctor() +193

Есть ли у вас идеи, откуда это происходит? Если я отлаживаю (локальную версию), этот метод вызывается только один раз.

Спасибо.

4b9b3361

Ответ 1

Вы можете попробовать инкапсулировать вызов этому методу, чтобы он не вызывался более одного раза

                if (!WebMatrix.WebData.WebSecurity.Initialized)
                {
                    WebSecurity.InitializeDatabaseConnection(...);
                }

Ответ 2

в моем случае у меня были оба

(в web.config)

<add key="enableSimpleMembership" value="true" />

и

(в _ViewStart.cshtml)

WebSecurity.InitializeDatabaseConnection("club", "Account", "UserID", "UserName", autoCreateTables: true);

Решение: похоже, у вас не может быть обоих, поэтому удалите один

Ответ 3

Помогает ли вам следующая SO-дискуссия?

Я нашел следующую статью, которая помогла мне использовать новые MVC4 и EF вместе с Простым провайдером членства, поэтому, если вы ее не прочитали, пожалуйста, взгляните:

SimpleMembership, поставщики членства, универсальные поставщики и новые веб-формы ASP.NET 4.5 и шаблоны ASP.NET MVC 4