[英]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.