При создании web-сервисов сложного поведения, бывает, требуется необходимость в сохранении его состояния от одного запроса к другому. Добиться этого можно двумя способами:
- Использованием файлов/БД с передачей уникального ключа в каждом запросе;
- Использованием сессий.
Второй вариант фактически есть упрощение первого, поэтому целесообразно рассматривать его и сразу. Решается этот вопрос аргументом
EnableSession атрибута
WebMethod:
[WebMethod( EnableSession = true )]
public int Echo( int _Val ) { ... }
При этом мы намекаем, что при вызове web-метода Echo имеет смысл предоставить сервером контексту севриса сессию, уникальную для клиента в определенный промежуток времени. Данный промежуток времени можно указать в web.config атрибутом
timeout элемента
sessionState. Чтобы сервер был в курсе, какую сессию предоставлять контексту сервиса - новую или одну из существующих - необходимо определить свойство
CookieContainer данного web-сервиса:
mService.CookieContainer = new CookieContainer( );
От рассмотренного второго варианта решения вопроса можно перейти к первому. ASP позволяет хранить сессии в БД. Определить эту возможность можно при помощи упомянутого ранее элемента
sessionState:
<sessionstate mode="SQLServer" sqlconnectionstring="..." sqlcommandtimeout="..."></sessionstate>
При этом ёмкая сессия будет размещаться в БД, а не в памяти процесса.
Комментариев нет:
Отправить комментарий