Сеанс входа Silverlight / WCF - PullRequest
       12

Сеанс входа Silverlight / WCF

1 голос
/ 09 марта 2009

Я работаю в системе с Silverlight и использую WCF для вызова сервисов для выполнения всей работы на стороне сервера.

Мне нужно, чтобы пользователь вошел в систему, и после проверки все вызовы на сервере должны содержать информацию о пользователе, чтобы сервер мог проверять политики безопасности и выполнять другие операции в зависимости от пользователя.

Каков наилучший способ сделать это? Я могу создать какой-то пользовательский класс и отправлять его на сервер при каждом вызове, но есть ли лучший способ сделать это с помощью Silverlight и / или WCF?

Ответы [ 2 ]

2 голосов
/ 09 марта 2009

Я бы использовал стандартный подход на основе токенов. Когда вы входите на сервер (передавая всю необходимую информацию через пользовательский класс, как вы предложили), сервер ответит токеном. Для каждого другого вызова сервера потребуется действительный токен. Затем сервер проверяет, что токен все еще действителен (срок его действия истекает автоматически) и что он поступает с того же компьютера / пользователя (например, вы можете проверить IP-адрес).

Вероятно, так я бы это реализовал. Вы не хотите передавать всю пользовательскую информацию при каждом вызове сервера. (Если вы находитесь в Интранете, вы можете использовать олицетворение или что-то в этом роде.)

0 голосов
/ 12 сентября 2012

Элементы управления Silverlight не могут напрямую обращаться к переменным сеанса, поскольку элементы управления silverlight являются элементами управления на стороне клиента. Но мы можем вызывать службы WCF для управления сеансом в Silverlight.

Мы должны установить переменную сеанса в сервисе 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

С помощью ссылки на службу в приложении silverlight мы можем установить переменную сеанса на странице .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...