C# ASMX WebMethod调用不保留变量值
正在调用我的Web服务C# ASMX WebMethod调用不保留变量值,c#,.net,web-services,asmx,C#,.net,Web Services,Asmx,正在调用我的Web服务 public class Service : System.Web.Services.WebService { public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } private string password; [WebMethod]
public class Service : System.Web.Services.WebService
{
public Service () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
private string password;
[WebMethod]
public void SetPassword(string pPassword)
{
password = pPassword;
}
private bool ValidPassword()
{
return (password == ConfigurationManager.AppSettings["Token"].ToString());
}
[WebMethod]
public DataSet GetAccountInfo(string account)
{
ValidPassword();
//logic here
}
正在执行调用的网页
Dim mySvc As New RNX.Service
mySvc.SetPassword("passwordhere")
Dim dsAcctInfo As DataSet = mySvc.GetAccountInfo(strAcct)
两种方法都执行得很好。。。SetPassword完成后,调用方使用相同的Web服务对象运行GetAccountInfo,检查它是否为ValidPassword()
但是,此时,变量再次为空。。。与中一样,不保留该值。您应该以
[WebMethod(EnableSession=true)]
的方式启用会话,并将密码存储在会话中
[WebMethod(EnableSession=true)]
public void SetPassword(string pPassword)
{
Session["password"] = pPassword;
}
您应该以[WebMethod(EnableSession=true)]
的方式启用会话,并将密码存储在会话中
[WebMethod(EnableSession=true)]
public void SetPassword(string pPassword)
{
Session["password"] = pPassword;
}
每次调用服务时,都会创建一个新实例。服务不是为维护状态而设计的。他们应该是无国籍的。因此,第一次使用mySvc.SetPassword调用它时,将实例化一个新的类服务实例并设置密码。如果不返回任何内容,则服务实例将被销毁。然后用mySvc.GetAccountInfo(strAcct)再次调用它,类服务的一个新实例被实例化,密码没有设置,所以ValidPassword()返回false
如果您想保持状态,可以使用会话来存储密码(尽管这似乎是个坏主意!)每次调用服务时,都会创建一个新实例。服务不是为维护状态而设计的。他们应该是无国籍的。因此,第一次使用mySvc.SetPassword调用它时,将实例化一个新的类服务实例并设置密码。如果不返回任何内容,则服务实例将被销毁。然后用mySvc.GetAccountInfo(strAcct)再次调用它,类服务的一个新实例被实例化,密码没有设置,所以ValidPassword()返回false
如果您想保持状态,可以使用会话来存储密码(尽管这似乎不是一个好主意!)ASMX是一种遗留技术,不应用于新的开发。WCF应用于web服务客户端和服务器的所有新开发。一个提示:微软已经在MSDN上退出了。ASMX是一项遗留技术,不应该用于新的开发。WCF应用于web服务客户端和服务器的所有新开发。一个提示:微软已经在MSDN上退出了。