如何给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"充满……"

谁能帮我一下?

如何给WebService中的变量赋值

Web服务在默认情况下是无状态的,这意味着它们在调用之间不保留状态。因此,在一次调用中设置的值将无法在下一次调用中使用。

如果需要有状态服务,有几种方法可以使用。这可能是最简单的了。

听起来你这样做是为了学习,在这种情况下,我建议阅读为什么使用有状态服务开发不是一个好的实践。

由于web服务是无状态的,所以你不能做你想做的事情。

虽然您只有一个客户端实例,但是对于每个调用,都会创建一个服务器端实例。这意味着在第一次调用中,您在对象上设置了变量,然后该对象将超出作用域(因为它与该请求绑定在一起)。当你进行第二次调用时,你的服务的一个新实例被创建,这个新实例显然不知道前一个实例。

如果你想做类似的事情,你需要保存状态。这可以通过多种方式实现:

  • 保存在Application对象(HttpContext.Current.Application("myvar") = a)
  • 将其保存为会话状态(您需要向服务类添加一个属性以启用会话状态,然后与Application相同,但访问HttpContext.Current.Session
  • 保存到数据库
  • 保存到文件

@I4V -谢谢你对我的帖子的评论。

我只是在bool变量之前添加了static,它工作了。