C# ASMX WebMethod调用不保留变量值

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]

正在调用我的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()


但是,此时,变量再次为空。。。与中一样,不保留该值。

您应该以
[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上退出了。