【发布时间】:2008-10-22 15:03:30
【问题描述】:
我有一个包含 8 个 Web 方法的 Web 服务。这些方法被同步调用,第一次调用验证用户身份,其余方法执行一个工作单元,这些方法被调用直到工作完成。
我需要存储工作的状态(例如,接下来要执行哪些操作,以及已完成和当前正在执行的工作。)我目前有一个包含此信息的状态对象。
我的问题是在每个 Web 服务调用之间保留此对象的最佳方式是什么?请注意,可能有多个用户调用此 Web 服务,每个用户都有自己独特的状态。
以下是我正在考虑的一些场景:
想法 #1
将对象存储在会话中。
想法 #2 创建一个实例变量,它是 userId 及其各自数据的 HashMap。类似:
[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 将是最干净的“自然方式”,但是我不知道实施这种方案的任何含义......您会推荐哪种方式或其他方式?
【问题讨论】:
标签: c# .net web-services