【问题标题】:How to give a value to a variable that is in a WebService?如何为 WebService 中的变量赋值?
【发布时间】:2013-04-28 23:05:46
【问题描述】:

我正在使用 C# 中的 WebServices 制作一个项目。我想问你,我怎样才能给从Client到Web Service的变量赋值?

例如: 在 Web 服务中,我有一个变量和两个方法,getVariable()setVariable(bool a);

bool var = false;

[WebMethod]
public void setVariable(bool a)
{
 var = a;
}

[WebMethod]
public bool getVariable()
{
 return var;
}

这就是我的网络服务的样子(很简单,因为我正在学习)。

我的客户: //在客户端中,我将 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 不等于“True”,而是等于“False”!!这意味着它没有执行此代码:obj.setVariable(true); 我的教授在课堂上说 WebService 现在“已满……”(但我听不太清楚),他说您必须找到一种方法使 WebService “满……”

有人可以帮我吗?

【问题讨论】:

  • 他可能说的是有状态的,而不是无状态的。 stackoverflow.com/questions/988819/stateful-webservice
  • 不是一个好方法,仅供学习:试试static bool var = false; 看看有什么不同
  • 那将是一个非常糟糕的方法,尤其是出于学习目的。
  • Var 是一个关键字。不要将变量命名为与关键字相同的名称,即使它不会引发错误。只是一个好习惯。
  • 是的@flup,它是有状态的......

标签: c# web-services


【解决方案1】:

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

我刚刚在bool 变量之前添加了static,它起作用了。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      由于网络服务是无状态的,你不能做你想做的事。

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

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

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

      【讨论】:

      • 您也可以使用 WF 服务,如果您使用的是较新的 .NET 版本,尽管这归结为同一件事 - 您需要创建工作流的实例。然而,诸如实例化和保存到数据库(持久化)之类的事情几乎是“开箱即用”完成的。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2021-04-27
      • 2014-06-27
      • 2022-11-28
      • 2018-06-18
      • 2013-03-01
      • 1970-01-01
      相关资源
      最近更新 更多