2011-08-24 2 views
5

ASP.NET 세션이 만료되고 사용자가 Silverlight 플러그인에서 작업 할 때 사용자를 로그인 페이지로 리디렉션해야한다는 요구 사항이 있습니다.Silverlight, RIA & ASP.Net 세션 시간 초과

우리는 ASP.Net을 실행하는 레거시 응용 프로그램을 가지고 있으며 모든 새 모듈은 Silverlight에 있고 레거시 응용 프로그램은 Silverlight 응용 프로그램을로드합니다. 그 모든 것이 작동합니다 :-) 사용자는 ASP.Net 세션이 끝난 후 다시 책상으로 돌아와서 돌아 오지만, RIA 도메인 서비스를 사용하는 Silverlight App에서 뭔가를 수행하려고 시도합니다. 세션에 시간이 초과 되었기 때문에 RIA 도메인 서비스가 실패하지만 SessionExpired 예외 또는 사용자/비밀번호가 잘못되어도 실패하지는 않으며 도메인에서 발생하는 "실제"예외와 유사한 도메인 예외로 인해 실패합니다 모델이므로 세션이 만료되었으므로이 시간을 식별 할 방법이 없습니다.

ASP.Net 세션을 유지하는 방법에 대한 많은 답변이 있습니다. 우리는 세션을 만료시키기를 원하지만 우리는이를 Silverlight에서 정상적으로 처리하고 로그인 페이지.

우리는이 방법을 사용하고 있지만 Silverlight 응용 프로그램에서 예외가 발생할 때마다 문제가 발생하여 로그인 페이지로 리디렉션됩니다. 이는 의도 한 동작이 아닙니다. 세션이 만료되는 경우에만 리디렉션하고 싶습니다.

아이디어가 있으십니까?

답변

2

나는 단지 같은 문제가 발생했습니다. 나는 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 
    } 
} 

이 도메인 예외와 사용자가 로그인하지 때마다를 내가 리디렉션 (I 사용자가 어떤 페이지를 참조하려면 로그인해야 가정) ASP.NET이 로그인 페이지로 리디렉션하도록하는 호출 페이지

편집 :이 솔루션은 .aspx 로그인 양식 (일반적으로 인증되지 않은 사용자가 Silverlight 코드를 다운로드하지 못하게하는 데 사용)을 사용할 때 유용합니다. Silverlight 등록 양식을 사용하는 경우 여기에서 대답을 찾으십시오. https://stackoverflow.com/a/8083744/178620.

+0

HtmlPage를 다시로드하지 않고 RegistrationWindow를 가져와야합니다. 이것은 훨씬 더 나은 대답입니다 : http://stackoverflow.com/a/8083744/178620 –

+0

팁 주셔서 감사합니다. Silverlight 로그인/등록 창을 사용하는 것이 옳습니다. 악의적 인 사용자가 로그인하지 않고도 Silverlight 응용 프로그램을 다운로드 할 수 없기 때문에 asp.net 폼 인증과 HTML 웹 폼을 사용하는 것을 선호합니다. 이러한 상황에서 내 대답은 여전히 ​​정확하며 사용자의 솔루션에 선호합니다. – slfan

+0

지금 어디에서 왔는지 알고 있습니다. 질문은 RIA를 지정하고 대부분의 사람들은 RegistrationWindow를 사용할 것입니다. 당신이 당신의 관점으로 당신의 대답을 업데이트하는 것을 꺼리지 않는다면, 나는 아래 표를 빼앗을 수있을 것입니다. –