簡體   English   中英

會話變量,Web服務,ASP.NET和C#

[英]Session Variables, Web Services, ASP.NET, and C#

我在ASP.NET的會話變量和Web服務代理對象方面遇到問題。 我可以訪問在實際的.asmx文件中創建的任何數據,但是“通過”會話變量添加數據絕對不會發生任何事情。

我的目標很簡單,我想創建一個“幾乎購物車”。 客戶在此文本框中輸入標題,然后將其發送到Web服務。 該Web服務在母版頁中被調用,它獲取一個數組列表,其中包含客戶所請求的“標題”。

數據在一個下拉框中可見,並且有一個標簽存儲所有項目的總成本(我現在不擔心成本)。

問題是,每當我調用Web服務方法時,絕對沒有任何反應。

有問題的代碼:

Basket.asmx

public class basket  : System.Web.Services.WebService {

ArrayList reservations = new ArrayList();
double total = 0;

public basket()
{
    reservations.Add("Extreme Test Data");
    reservations.Add("Moar Test Data");
}

[WebMethod]
public string[] getReservations()
{
    //This may be part of the issue, still not sure.

    return (string[])reservations.ToArray(typeof( string));
}
[WebMethod]
public string toString()
{
    return reservations[reservations.Count - 1].ToString();
}


[WebMethod]
public double getTotal()
{
    return total;
}

[WebMethod]
public void addCost(double price)
{
    total = total + price;
}

[WebMethod]

public void addReservation(String title)
{

    reservations.Add(title);

}
[WebMethod]
public void removeReservation(string title)
{
}
[WebMethod]
public int getLength()
{
    return reservations.Count;
}

Global.asax

    void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
    localhost.basket proxy = new localhost.basket();
    Session["reservations"] = proxy;
}

(global.asax中的所有其他內容均為默認設置)

母版頁

這是母版頁中唯一相關的代碼,它通過會話變量調用Web服務。

    protected void Page_Load(object sender, EventArgs e)
{

    localhost.basket proxy = (localhost.basket)Session["reservations"];

        lblTotal.Text = proxy.getTotal().ToString("c");
        string[] res = proxy.getReservations();
        ddReservations.DataSource = res;
        ddReservations.DataBind();
        proxy.addReservation("Half Life 2");
}

Reservations.aspx

該頁面將實際的“新”數據提交到Web服務。 我已經刪掉了很多(這是一個小組項目,所以我沒有寫很多代碼)。

protected void Page_Load(object sender, EventArgs e)
{
    proxy = (localhost.basket)Session["reservations"];
    Response.Write(proxy.toString() + "Count: " + proxy.getLength());

}

  protected void cmdSubmit_Click(object sender, EventArgs e)
{
    proxy.addReservation(txtGameTitle.Text);        
    proxy.addCost(39.99);
}

工作原理:我在ASMX中輸入的默認測試值可以很好地加載到文本框中。

簡而言之,我可以在會話變量中使用Web服務代理對象嗎? 如果不是,“共享”該對象的最佳方法是什么?

另外:我正在使用VS2005。

謝謝你的幫助!

每個Web服務調用都在Web服務類的不同實例上發生。 您的reservations變量不能用作維護兩次調用之間的狀態,因為它是一個實例變量。

您最好使服務成為無狀態。 但是,對於這種情況,您應該將購物車存儲到數據庫中。 這樣,購物車不會因系統故障而丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM