2009-06-30 5 views
2

Я пишу приложение silverlight, напоминающее систему корзины покупок. Это приложение может быть запущено только с сайта asp.net после входа пользователя на сайт.Загрузка исходного состояния в приложении silverlight на основе сеанса asp.net

При первой загрузке приложение отправит запрос на бэкэнд через службу WCF, чтобы восстановить все существующие элементы в корзине покупок.

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

Я нашел Есть несколько способов, до сих пор, но не устраивает ни один из них:

  1. с помощью ФОС Сеть САШ Compat. silverlight может спросить, кто текущий пользователь, попросив службу wcf.
  2. передать параметры со страницы на xaml с помощью xaml.InitParameters и передать минимальный объем информации для идентификации пользователя в сериализованном формате.
  3. параметров проходят через строку запроса в XAML (по-видимому, это также возможно)

Может кто-нибудь поделиться передовым опытом для достижения этой цели? Спасибо

ответ

2

Мы используем первое решение в наших проектах. В этом случае вы не должны изобретать какой-либо тип сериализации. Недостаток этого подхода - дополнительно async логика при запуске.

Пример службы:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class UserInfoService : IUserInfoService 
{ 
     public UserInfo GetUserInfo() 
     { 
       if (HttpContext.Current.User.Identity.IsAuthenticated) 
         return null; 

       var userInfo = new UserInfo 
       { 
         Login = HttpContext.Current.User.Identity.Name, 
         Fullname = ..., 
       }; 

       return userInfo; 
     } 
} 

Отправка через идентификатор пользователя initParams или строки запроса не является хорошей идеей, я думаю. Такие вещи должны быть более скрытыми.

Настоящим важным является проверка пользователя на сервере по номеру каждого вызова, так как любой может позвонить вашим услугам так же, как ваше приложение.

HTH