2012-10-25 30 views
12

Tôi đang thử Windows Azure để lưu trữ ứng dụng web MVC4. Tôi đã tạo một ứng dụng thử nghiệm, sử dụng mẫu ứng dụng internet VS2012 MVC4 và thêm Mô hình và Bộ điều khiển tùy chỉnh vào nó.Phương thức WebSecurity.InitializeDatabaseConnection chỉ có thể được gọi là

Tôi đã xuất bản nó trên Azure và được quản lý để nhận 'cơ sở dữ liệu cập nhật' áp dụng di chuyển sang Cơ sở dữ liệu Azure.

Khi tôi thử ứng dụng cục bộ, nhưng sử dụng cơ sở dữ liệu Azure SQL, nó hoạt động tốt. Tôi có thể đăng nhập/đăng ký và sử dụng bộ điều khiển kiểm tra của mình.

Khi tôi cố gắng ứng dụng trực tuyến, tôi có thể sử dụng bộ điều khiển thử nghiệm nhưng đăng nhập hoặc đăng ký liên kết cung cấp cho các ngoại lệ sau đây:

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 

Bạn có bất cứ ý tưởng nơi mà đến từ đâu? Nếu tôi gỡ lỗi (phiên bản cục bộ), phương thức này chỉ được gọi một lần.

Cảm ơn.

+3

cách tắt chủ đề này? Tôi có một vấn đề tương tự. –

+0

mã mà bạn gọi là WebSecurity.InitializeDatabaseConnection ở đâu? – Nikos

Trả lời

16

Bạn có thể thử gói gọn (các) cuộc gọi vào phương thức đó để đảm bảo nó không được gọi nhiều hơn sau đó một lần

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

đã phải làm điều đó hai lần, một lần trong việc thực hiện InitializeSimpleMembershipAttribute và sau đó một lần nữa trong phương pháp configure.cs di chuyển ef của tôi, nơi tôi 'InitializeDatabaseConnection'ed để hạt giống một số người dùng cấu hình sẵn/vai trò. Cảm ơn ý tưởng! Đôi khi giải pháp đơn giản hoạt động tốt nhất – Ingo

+3

Hãy cẩn thận: 'Khởi tạo' và' InitializeDatabaseConnection' không an toàn luồng, và bạn có thể dễ dàng tạo điều kiện mà bạn tạo ra tiềm năng cho một điều kiện chủng tộc. Xem [câu trả lời này] (http://stackoverflow.com/a/16512694/1945631) để biết chi tiết. –

1

trong trường hợp của tôi, tôi có cả

(trong web.config)

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

(trong _ViewStart.cshtml)

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

Giải pháp: nó có vẻ như bạn không thể có cả hai, vì vậy hãy xóa một số

Các vấn đề liên quan