我的Web服务被称为
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 Service对象,调用者然后运行GetAccountInfo,它检查它是ValidPassword()。
但是,此时,变量再次为空......如同,不保留值。
答案 0 :(得分:2)
您应该以{{1}}启用会话,并将密码存储在[WebMethod(EnableSession=true)]
。
Session
答案 1 :(得分:2)
每次调用服务时,都会创建一个新实例。服务不是为维持状态而设计的。他们应该是无国籍的。因此,第一次使用mySvc.SetPassword调用时,将实例化一个新的类Service实例并设置密码。没有返回任何内容,然后销毁Service实例。然后使用mySvc.GetAccountInfo(strAcct)再次调用它,实例化类Service的新实例并且未设置密码,因此ValidPassword()返回false。
如果你想维护状态,可以用Session来存储密码(虽然这看起来不错!)