我有一个webservice(.asmx),我希望它能够保持每个用户的价值。这可能吗?
即(伪代码)
MyWebservice
{
object perUserVariable = something;
[WebMethod]
public void myMethod()
{
if (something == null)
{
something = doBigExpensivedatabaseCall();
}
return something;
}
}
答案 0 :(得分:2)
您可以使用ASP.NET's session mechanism
更改您的WebMethod
属性,以便它看起来像这样:
[WebMethod(EnableSession = true)]
这通常通过cookie或通过在查询字符串中发送会话ID来实现(两种方式都由ASP.NET完全处理)。前者是默认的,要实现后者,只需在config.web文件中设置cookieless="true"
即可。
答案 1 :(得分:0)
是的,您需要传递某种用户标识符来指定用户是谁,进行操作,而不是将其存储在您将使用持久或半持久存储(如Cache或Session)的内容中。然后从缓存或会话中查找该值,而不是本地成员。
同样fwiw你配置的方式事实上某些东西不是静态的意味着它在每个请求上都是null,因为它会被新初始化。然后将其设置为静态,然后将事物的各个实例服务于其后的每个请求。
这就是为什么您需要使用可以区分用户的商店,例如Cache [userid +“something”]或Session [“something”]。
答案 2 :(得分:0)
您的选择似乎正在使用某种类型的缓存系统,如会话或memcache。
会话将要求将会话ID作为cookie传递给请求。其他缓存提供程序可能可以关闭像userid这样的post值。