2009-03-09 5 views
1

Silverlight를 사용하는 시스템에서 작업하면서 WCF를 사용하여 서비스를 호출하여 서버 측에서 모든 작업을 수행합니다.Silverlight/WCF 로그인 세션

사용자가 시스템에 로그인해야합니다. 일단 확인되면 서버에 대한 모든 호출에 사용자 정보가 있어야 서버가 보안 정책을 확인하고 사용자를 기반으로 다른 작업을 수행 할 수 있습니다.

가장 좋은 방법은 무엇입니까? 나는 어떤 종류의 사용자 클래스를 생성하여 모든 호출을 통해 서버로 보낼 수 있지만 Silverlight 및 WCF를 사용하여이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

2

표준 토큰 기반 접근 방식을 사용합니다. 서버에 로그인 할 때 (제안 된대로 사용자 클래스를 통해 필요한 모든 정보를 전달하면) 서버는 토큰으로 응답합니다. 다른 모든 서버 호출에는 유효한 토큰이 필요합니다. 그런 다음 서버는 토큰이 여전히 유효한지 (몇 시간이 지나면 자동으로 만료 됨) 동일한 컴퓨터/사용자 (IP 주소를 확인할 수 있음)에서 왔음을 확인합니다.

아마도이 방법을 구현할 것입니다. 모든 서버 호출마다 모든 사용자 정보를 전달하고 싶지는 않습니다. (인트라넷에있는 경우 가장 같은 것을 사용하고 싶을 수도 있습니다.)

0

Silverlight 컨트롤은 클라이언트 측 컨트롤이므로 직접 세션 변수에 액세스 할 수 없습니다. 그러나 Silverlight에서 세션을 관리하기 위해 WCF 서비스를 호출 할 수 있습니다 .

우리는 다음과 같이 wcf 서비스에서 세션 변수를 설정해야합니다.

<ServiceContract(Namespace:="")> _ 
<AspNetCompatibilityRequirements 
(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _ 
Public Class PersonService 
    <OperationContract()> _ 
    Public Sub DoWork() 
     ' Add your operation implementation here 
    End Sub 
    ' Add more operations here and mark them with <OperationContract()> 

    <OperationContract()> _ 
    Public Sub SetSessionVariable(ByVal Sessionkey As String) 
     System.Web.HttpContext.Current.Session("Key") = Sessionkey 
     System.Web.HttpContext.Current.Session.Timeout = 20 
    End Sub 
    <OperationContract()> _ 
    Public Function GetSessionVariable() As String 
     Return System.Web.HttpContext.Current.Session("Key") 
    End Function 

End Class 

실버 라이트 애플리케이션에 서비스를 참조하면 .xaml 페이지에서 세션 변수를 다음과 같이 설정할 수 있습니다.

Dim client As Service.PersonServiceClient = New Service.PersonServiceClient() 
'Calls the SetSessionVariable() and store values in the session. 
client.SetSessionVariableAsync("Soumya") 

We will get the session variable in the .xaml page by calling GetSessionVariable() where we want to check the session 

Dim client As Service.PersonServiceClient = New Service.PersonServiceClient() 
AddHandler client.GetSessionVariableCompleted, AddressOf client_GetSessionVariableCompleted 
client.GetSessionVariableAsync() 

Private Sub client_GetSessionVariableCompleted(ByVal sender As Object, ByVal e As GetSessionVariableCompletedEventArgs) 
     Try 
      If Not String.IsNullOrEmpty(e.Result) Then 
       MessageBox.Show(e.Result) 
      Else 
       MessageBox.Show("Your session has been expired") 
      End If 
     Catch ex As FaultException   
     End Try 
End Sub