2011-08-24 45 views
5

Chúng tôi có yêu cầu nơi chúng tôi muốn chuyển hướng người dùng đến trang đăng nhập khi phiên ASP.NET hết hạn và người dùng đang làm việc trong plugin Silverlight.Thời gian chờ của Silverlight, RIA & ASP.Net

Vì vậy, kịch bản là, chúng tôi có một ứng dụng kế thừa chạy ASP.Net, tất cả các mô-đun mới của chúng tôi đều nằm trong Silverlight và ứng dụng cũ tải ứng dụng Silverlight. Điều đó tất cả các công trình :-) Người dùng sau đó đi ra khỏi bàn của họ và trở lại sau khi ASP.Net Session lần ra, nhưng sau đó cố gắng tiếp tục làm một cái gì đó trong ứng dụng Silverlight, trong đó sử dụng một dịch vụ tên miền RIA. Vì phiên làm việc hết thời gian, Dịch vụ miền RIA không thành công, nhưng nó không thất bại với ngoại lệ SessionExpired, cũng như không có User/Password không hợp lệ, nó chỉ thất bại với một ngoại lệ tên miền tương tự như các ngoại lệ "thực" được ném trong miền do đó chúng tôi không có cách nào để xác định rằng lần này là do phiên hết hạn.

Có rất nhiều câu trả lời cho cách giữ phiên ASP.Net của bạn còn sống, chúng tôi không muốn làm điều đó, chúng tôi muốn phiên hết hạn, nhưng chúng tôi muốn có thể xử lý nó một cách duyên dáng trong Silverlight và hướng người dùng đến trang đăng nhập.

Chúng tôi đã làm việc này, nhưng vấn đề là bất cứ khi nào ngoại lệ được nêu ra trong ứng dụng Silverlight, điều này sẽ chuyển bạn đến trang đăng nhập, đó không phải là hành vi dự định. Chúng tôi chỉ muốn chuyển hướng khi đó là trường hợp hết hạn phiên.

Bất kỳ ý tưởng nào?

Trả lời

2

Tôi vừa tình cờ gặp vấn đề tương tự. Tôi đã thêm đoạn mã sau vào Application_UnhandledException:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 
    // redirect to login on exceptions when user is not logged in 
    var domainException = e.ExceptionObject as DomainOperationException; 
    if (domainException != null && !WebContext.Current.User.IsAuthenticated) 
    { // probably a server-side timeout has occurred. 
     e.Handled = true; 
     HtmlPage.Document.Submit(); // redirect to login page 
    } 
} 

Bất cứ khi nào có một ngoại lệ miền và người dùng không đăng nhập (tôi giả sử rằng người dùng phải đăng nhập để xem bất kỳ trang), tôi chuyển hướng đến trang gọi điện khiến ASP.NET chuyển hướng đến trang đăng nhập.

EDIT: Giải pháp này hữu ích khi bạn sử dụng biểu mẫu đăng nhập .aspx (mà tôi thường sử dụng để ngăn người dùng chưa được xác thực tải xuống mã Silverlight). Trong trường hợp bạn sử dụng mẫu đăng ký Silverlight, bạn sẽ tìm thấy câu trả lời ở đây https://stackoverflow.com/a/8083744/178620.

+0

Bạn nên mang đến RegistrationWindow, thay vì cố gắng tải lại HtmlPage. Đây là một câu trả lời tốt hơn nhiều: http://stackoverflow.com/a/8083744/178620 –

+0

Cảm ơn bạn rất nhiều về mẹo của bạn. Bạn đã đúng nếu bạn sử dụng cửa sổ đăng nhập/đăng ký Silverlight. Tôi thích sử dụng xác thực biểu mẫu asp.net và biểu mẫu web HTML cho thông tin đăng nhập, bởi vì người dùng độc hại không thể tải xuống ứng dụng Silverlight mà không cần đăng nhập. Trong những trường hợp này, câu trả lời của tôi vẫn đúng và tôi thích giải pháp của bạn. – slfan

+0

Tôi thấy bạn đang đến từ đâu - câu hỏi chỉ định RIA và hầu hết mọi người sẽ chỉ sử dụng RegistrationWindow. Nếu bạn không nhớ cập nhật câu trả lời của bạn với quan điểm của bạn, tôi sẽ có thể lấy đi phiếu bầu xuống. –

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