C# 如何给Web服务中的变量赋值?
我正在用C#中的WebServices制作一个项目。我想问你,我如何给从客户端到Web服务的变量赋值 例如: 在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
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();
}