0

我正在使用 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 现在“已满......”(但我听不太清楚),他说你必须找到一种方法网络服务“满...”

有人能帮我吗 ?

4

3 回答 3

3

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

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

听起来您这样做是出于学习目的,在这种情况下,我建议您阅读一下为什么使用有状态服务进行开发不是一个好习惯。试试这个作为初学者。

于 2013-05-04T19:07:43.230 回答
2

由于 Web 服务是无状态的,因此您无法做您想做的事情。

尽管您只有一个客户端实例,但每次调用都会创建一个服务器端实例。这意味着在第一次调用中,您在对象上设置变量,然后该变量超出范围(因为它与该请求相关联)。当您进行第二次调用时,会创建一个新的服务实例,而这个新实例显然不知道前一个实例。

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

  • 保存Application对象中的值 ( HttpContext.Current.Application("myvar") = a)
  • Application将其保存为会话状态(您需要在服务类中添加一个属性以启用会话状态,然后您与HttpContext.Current.Session
  • 将其保存在数据库中
  • 将其保存在文件中
  • ...
于 2013-05-04T19:05:17.207 回答
0

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

我只是在变量static之前添加了它并且它起作用了。bool

于 2013-05-07T17:55:30.373 回答