Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何给Web服务中的变量赋值?_C#_Web Services - Fatal编程技术网

C# 如何给Web服务中的变量赋值?

C# 如何给Web服务中的变量赋值?,c#,web-services,C#,Web Services,我正在用C#中的WebServices制作一个项目。我想问你,我如何给从客户端到Web服务的变量赋值 例如: 在web服务中,我有一个变量和两个方法,getVariable()和setVariable(bool a) 这就是我的web服务的外观(很简单,因为我正在学习) 我的客户: //在客户端中,我添加了web服务作为服务引用,并添加了以下代码: ServiceReference.ServiceSoapClient obj = new ServiceReference.ServiceSoapC

我正在用C#中的WebServices制作一个项目。我想问你,我如何给从客户端到Web服务的变量赋值

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

这就是我的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
不等于“True”,而是等于“False”!!这意味着它没有执行以下代码:
obj.setVariable(true)
我的教授在课堂上说Web服务现在“满了…”(但我听不太清楚),他说你必须找到一种方法使Web服务“满了…”


有人能帮我吗?

因为web服务是无状态的,所以您不能做您想做的事情

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

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

  • 将值保存在
    应用程序
    对象中(
    HttpContext.Current.Application(“myvar”)=a
  • 将其保存在会话状态(您需要向服务类添加一个属性以启用会话状态,然后您可以使用
    应用程序执行相同的操作,但要访问
    HttpContext.Current.session
  • 将其保存到数据库中
  • 保存在一个文件中

由于web服务是无状态的,您无法执行您试图执行的操作

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

如果要执行类似操作,则需要保存状态。这可以通过多种方式完成:

  • 将值保存在
    应用程序
    对象中(
    HttpContext.Current.Application(“myvar”)=a
  • 将其保存在会话状态(您需要向服务类添加一个属性以启用会话状态,然后您可以使用
    应用程序执行相同的操作,但要访问
    HttpContext.Current.session
  • 将其保存到数据库中
  • 保存在一个文件中

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

      如果您需要一个有状态的服务,有几种方法。这可能是最简单的方法


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

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

      如果您需要一个有状态的服务,有几种方法。这可能是最简单的方法


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

      @I4V-谢谢你在我的帖子上的评论


      我刚刚在
      bool
      变量之前添加了
      static
      ,它成功了。

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


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

      他可能说有状态,而不是无状态。这不是一个好方法,只是为了学习目的:试试
      static bool var=false;
      看看区别,这将是一个非常糟糕的方法,尤其是为了学习目的。var是一个关键字。不要忘记将变量设置为与关键字相同的状态,即使它不会引发错误。这是一个很好的做法。是的@flup,它是有状态的……他可能说有状态的,而不是无状态的。这不是一个好方法,只是为了学习目的:尝试
      static bool var=false;
      并查看差异这将是一个非常糟糕的方法,尤其是对于学习purposes.Var是一个关键字。不要将变量命名为与关键字相同的名称,即使它不会引发错误。这只是一个好的做法。是的@flup,它是有状态的……如果您使用的是较新的.NET版本,您也可以使用WF服务,尽管这归结为同一件事——您需要创建工作流实例。但是,例如实例化和保存到数据库(持久化)基本上是“开箱即用”的。:)如果您使用的是较新的.NET版本,您也可以使用WF服务,尽管这归结为同一件事-您需要创建工作流的实例。但是,实例化和保存到数据库(持久化)等工作基本上是“开箱即用”的。:)
      ServiceReference.ServiceSoapClient obj = new ServiceReference.ServiceSoapClient();
      
      
      private void Form_Load(object sender, EventArgs e)
      {
          obj.setVariable(true);
          label1.Text = obj.getVariable().ToString();
      }