У меня есть веб-сервис, который имеет 8 веб-методов. Эти методы вызываются синхронно, первый вызов аутентифицирует пользователя, а остальные методы выполняют единицу работы, эти методы вызываются до тех пор, пока работа не будет завершена.
Мне нужно сохранить состояние работы (например, какие действия следует выполнить дальше, и какая работа была выполнена и выполняется в настоящее время.) В настоящее время у меня есть объект состояния, который содержит эту информацию.
Мой вопрос: как лучше сохранить этот объект между каждым вызовом веб-службы? Обратите внимание, что этот веб-сервис может вызывать несколько пользователей, каждый из которых имеет свое уникальное состояние.
Вот несколько сценариев, о которых я думаю:
Идея № 1
Сохранить объект в сеансе.
Идея № 2
Создайте переменную экземпляра, которая является HashMap userId и их соответствующими данными. что-то вроде:
[WebService(Namespace = "http://developer.intuit.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class QBWCService : QBWebConnectorSvc {
// instance variable to hold current session data...
private Dictionary<Guid,Session> Sessions;
public QBWCService () {
Sessions = new Dictionary<Guid,Session>();
}
[WebMethod]
public override string[] authenticate(string strUserName, string strPassword)
{
...
Sessions.Add(UserId, new SessoionObject());
}
[WebMethod]
public override string[] authenticate(Guid UserId)
{
SessionObject o = Sessions[UserId];
}
}
Я думаю, что Идея 2 будет самым чистым "естественным путем", однако я не знаю никаких последствий реализации такого рода схемы ... какой путь или что еще вы бы порекомендовали?