ASMX WebMethod调用不保留变量值

时间:2013-09-10 20:31:52

标签: 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 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()。

但是,此时,变量再次为空......如同,不保留值。

2 个答案:

答案 0 :(得分:2)

您应该以{{1​​}}启用会话,并将密码存储在[WebMethod(EnableSession=true)]

Session

答案 1 :(得分:2)

每次调用服务时,都会创建一个新实例。服务不是为维持状态而设计的。他们应该是无国籍的。因此,第一次使用mySvc.SetPassword调用时,将实例化一个新的类Service实例并设置密码。没有返回任何内容,然后销毁Service实例。然后使用mySvc.GetAccountInfo(strAcct)再次调用它,实例化类Service的新实例并且未设置密码,因此ValidPassword()返回false。

如果你想维护状态,可以用Session来存储密码(虽然这看起来不错!)