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
    }

呼び出しを行っている Web ページ

        Dim mySvc As New RNX.Service

        mySvc.SetPassword("passwordhere")

        Dim dsAcctInfo As DataSet = mySvc.GetAccountInfo(strAcct)

どちらのメソッドも問題なく実行されています... SetPassword が終了すると、呼び出し元は同じ Web サービス オブジェクトを使用して GetAccountInfo を実行し、それが ValidPassword() であることを確認します。

ただし、この時点で、変数は再びnullです...のように、値を保持していません。

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 を返します。

状態を維持したい場合は、セッションを使用してパスワードを保存できます (ただし、これは悪い考えのようです!)

于 2013-09-10T20:44:17.547 に答える