Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Silverlight закрывает прокси WCF-сервиса  (Прочитано 5672 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« : 19-10-2010 15:01 » 

День добрый. при связке wsHttpBinding прокси-клиент создается один раз, пока я его не закрою. В сильверлайте используется связка httpBaseBinding. И там каждый раз при вызове метода прокси создается заново. Отслеживал, используя вот такой простой код. В сильверлайте при клике не кнопку вызываю метод GetDate - время всегда меняется...

Код:
[ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string GetDate();

    }

Код:
    public class Service1 : IService1
    {
        private DateTime now;
        public Service1()
        {
            now = DateTime.Now;
        }
        public string GetDate()
        {
            return now.ToString();
        }
    }


Но что делать, если мне нужно в одном методе передать данные, в другом их обработать и результат получить в третьем?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 20-10-2010 11:08 » 

HTTP обычно устанавливает соединение на один запрос. Экземпляр сервиса создаётся на запрос, отрабатывает его и выгружается. В принципе, так же работают и страницы ASP.NET.

Если нужно, чтобы сервис отслеживал последовательность действий, нужно включить поддержку сессий. Это делается с помощью параметра
Код: (Text)
SessionMode = SessionMode.Required
для атрибута ServiceContract. Тогда промежуточные результаты можно сохранять в словаре Session, и для каждого подключающегося пользователя будет свой независимый от других пользователей словарь. При этом экземпляр сервиса по-прежнему будет создаваться и уничтожаться на каждый запрос.

Чтобы экземпляр сервиса существовал более длительное время, можно установить для класса, реализующего интерфейс сервиса, атрибут
Код: (Text)
ServiceBehavior(InstanceContextMode = ...)
У этого параметра есть 3 значения:
- PerCall (по умолчанию) - экземпляр создаётся на каждый запрос и уничтожается после окончания запроса.
- PerSession - экземпляр создаётся каждому пользователю и может обработать последовательность запросов, пока в результате бездействия пользователя, не будет уничтожен по таймауту.
- Single - создаётся один глобальный экземпляр для всех запросов, всех сессий и их пользователей. Существует, пока host сервиса не выгрузит его (если это IIS), или пока не завершится host-процесс.

Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 24-10-2010 16:18 » 

Спасибо за детальные разъяснения!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines