Luôn đặt thuộc tính “applicationName” khi cấu hình thành viên và các Nhà cung cấp khác

Người dùng được tạo bằng API thành viên sẽ được liên kết với giá trị applicationName được chỉ định trong khai báo của nhà cung cấp trong tệp web.config. Biểu đồ này cho thấy cách người dùng được liên kết với applicationName trong cơ sở dữ liệu:

Quan hệ giữa aspnet_Users và aspnet_Applications

Khi không có thuộc tính applicationName nào được cấu hình, ASP.NET sử dụng đường dẫn vroot ứng dụng trong máy chủ web để tự động tính toán tên applicationName để sử dụng khi thêm dữ liệu vào cơ sở dữ liệu dịch vụ ứng dụng ASP.NET.

Bây giờ hãy giả sử bạn phát triển ứng dụng ASP.NET 2.0 cục bộ bằng cách sử dụng các tính năng Thành viên, Vai trò và Tiểu sử và bạn chưa xác định thuộc tính applicationName. Bạn tạo một số người dùng mới. Vì thuộc tính applicationName không được chỉ định người dùng của bạn đã được liên kết với giá trị được tính tự động (một cái gì đó như “/ WebSite1”).

Điều này hoạt động tốt khi ứng dụng tiếp tục chạy trong đường dẫn ảo “/ WebSite1” ứng dụng. Nhưng nếu nó được sao chép sang một vị trí hoặc máy chủ khác với một đường dẫn ảo khác (ví dụ: “/ app1” hoặc thường hơn là “/”) thì khi các API thành viên được sử dụng, họ sẽ không thấy những người dùng đã có trong cơ sở dữ liệu – vì chúng sẽ tìm kiếm dữ liệu thành viên bằng cách sử dụng tên ứng dụng khác và lọc người dùng trong bảng application_Users theo. Đó là lý do tại sao bạn sẽ nhận được thông báo “Đăng nhập không thành công, vui lòng thử lại.” tin nhắn khi bạn cố gắng đăng nhập.

Cách tốt nhất để ngăn chặn điều này xảy ra là luôn xác định thuộc tính “applicationName” khi khai báo các nhà cung cấp của bạn. Một giá trị mặc định tốt để sử dụng là “/” – đó là tên ứng dụng gốc. Đây là giá trị được chỉ định cho nhà cung cấp mặc định vận chuyển với ASP.NET 2.0 (mặc định lưu trữ dữ liệu dịch vụ ứng dụng trong tệp ASPNETDB.MDF trong / app_data) và đó là lý do tại sao nếu bạn không ghi đè cài đặt nhà cung cấp, nó sẽ làm việc nếu bạn sao chép một ứng dụng vào máy khác.

Leave a Reply

Your email address will not be published. Required fields are marked *