0

我的 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 服务对象,调用者然后运行 ​​GetAccountInfo,它检查它是否是 ValidPassword()。

但是,此时,变量又为空了……如中,不保留值。

4

2 回答 2

2

您应该启用会话[WebMethod(EnableSession=true)]并将密码存储在Session.

[WebMethod(EnableSession=true)]
public void SetPassword(string pPassword)
{
    Session["password"] = pPassword;
}
于 2013-09-10T20:43:56.230 回答
2

每次调用服务时都会创建一个新实例。服务并非旨在维护状态。他们应该是无国籍的。因此,第一次使用 mySvc.SetPassword 调用它时,会实例化 Service 类的新实例并设置密码。什么都没有返回,然后服务实例被销毁。然后使用 mySvc.GetAccountInfo(strAcct) 再次调用它,实例化类 Service 的新实例并且未设置密码,因此 ValidPassword() 返回 false。

如果你想保持状态,你可以使用 Session 来存储密码(尽管这似乎是个坏主意!)

于 2013-09-10T20:44:17.547 回答