HTTP обычно устанавливает соединение на один запрос. Экземпляр сервиса создаётся на запрос, отрабатывает его и выгружается. В принципе, так же работают и страницы ASP.NET.
Если нужно, чтобы сервис отслеживал последовательность действий, нужно включить поддержку сессий. Это делается с помощью параметра
SessionMode = SessionMode.Required
для атрибута ServiceContract. Тогда промежуточные результаты можно сохранять в словаре Session, и для каждого подключающегося пользователя будет свой независимый от других пользователей словарь. При этом экземпляр сервиса по-прежнему будет создаваться и уничтожаться на каждый запрос.
Чтобы экземпляр сервиса существовал более длительное время, можно установить для класса, реализующего интерфейс сервиса, атрибут
ServiceBehavior(InstanceContextMode = ...)
У этого параметра есть 3 значения:
- PerCall (по умолчанию) - экземпляр создаётся на каждый запрос и уничтожается после окончания запроса.
- PerSession - экземпляр создаётся каждому пользователю и может обработать последовательность запросов, пока в результате бездействия пользователя, не будет уничтожен по таймауту.
- Single - создаётся один глобальный экземпляр для всех запросов, всех сессий и их пользователей. Существует, пока host сервиса не выгрузит его (если это IIS), или пока не завершится host-процесс.