如何给WebService中的变量赋值
本文关键字:变量 赋值 WebService | 更新日期: 2023-09-27 18:12:03
我正在c#中使用WebServices制作一个项目。我想问你,我怎么能给一个值从客户端到Web服务的变量?
例如:在web服务中,我有一个变量和两个方法,getVariable()
和setVariable(bool a);
bool var = false;
[WebMethod]
public void setVariable(bool a)
{
var = a;
}
[WebMethod]
public bool getVariable()
{
return var;
}
这是我的web服务看起来(它很简单,因为我正在学习)。
我的客户://在客户端,我添加了web服务作为服务引用,并添加了以下代码:
ServiceReference.ServiceSoapClient obj = new ServiceReference.ServiceSoapClient();
private void Form_Load(object sender, EventArgs e)
{
obj.setVariable(true);
label1.Text = obj.getVariable().ToString();
}
当我加载我的形式,label1.Text
不等于"真",但与"假"!!这意味着它没有执行这段代码:obj.setVariable(true);
我的教授在课上说WebService现在"满了...."(但我听不太清楚),他说你必须找到一种方法让WebServices"充满……"
谁能帮我一下?
Web服务在默认情况下是无状态的,这意味着它们在调用之间不保留状态。因此,在一次调用中设置的值将无法在下一次调用中使用。
如果需要有状态服务,有几种方法可以使用。这可能是最简单的了。
听起来你这样做是为了学习,在这种情况下,我建议阅读为什么使用有状态服务开发不是一个好的实践。
由于web服务是无状态的,所以你不能做你想做的事情。
虽然您只有一个客户端实例,但是对于每个调用,都会创建一个服务器端实例。这意味着在第一次调用中,您在对象上设置了变量,然后该对象将超出作用域(因为它与该请求绑定在一起)。当你进行第二次调用时,你的服务的一个新实例被创建,这个新实例显然不知道前一个实例。
如果你想做类似的事情,你需要保存状态。这可以通过多种方式实现:
- 保存在
Application
对象(HttpContext.Current.Application("myvar") = a
) - 将其保存为会话状态(您需要向服务类添加一个属性以启用会话状态,然后与
Application
相同,但访问HttpContext.Current.Session
- 保存到数据库
- 保存到文件
- …
@I4V -谢谢你对我的帖子的评论。
我只是在bool
变量之前添加了static
,它工作了。