12

我正在尝试使用 Windows Azure 来托管 MVC4 Web 应用程序。我创建了一个测试应用程序,使用 VS2012 MVC4 互联网应用程序模板并向其中添加了一个自定义模型和控制器。

我已在 Azure 上发布它并设法将“更新数据库”应用迁移到 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

你知道那是从哪里来的吗?如果我调试(本地版本),这个方法只调用一次。

谢谢。

4

3 回答 3

17

您可以尝试封装对该方法的调用,以确保它不会被多次调用

                if (!WebMatrix.WebData.WebSecurity.Initialized)
                {
                    WebSecurity.InitializeDatabaseConnection(...);
                }
于 2013-01-04T20:30:41.290 回答
1

就我而言,我两者都有

(在 web.config 中)

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

(在 _ViewStart.cshtml 中)

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

解决方案:看来你不能同时拥有,所以删除一个

于 2013-03-21T01:18:51.807 回答
0

以下 SO 讨论对您有帮助吗?

我确实发现以下文章对我使用较新的 MVC4 和 EF 以及 Simple Membership Provider 有很大帮助,所以如果您还没有阅读它,请看一下:

SimpleMembership、Membership Providers、Universal Providers 和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板

于 2012-12-20T20:11:17.100 回答