我遇到ASP.NET会话变量和Web服务代理对象的问题。我可以访问我在实际的.asmx文件中创建的任何数据,但通过添加数据“通过”会话变量导致完全没有任何事情发生。会话变量,Web服务,ASP.NET和C#
我的目标很简单,我想创建一个“几乎购物车”。客户在此文本框中输入标题,并将其发送到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。
感谢您的帮助!
同意。一个好的设计可以弥补这些问题。 –
好的,谢谢,我们几乎已经通过数据库实现了它,所以它不会很难实现,谢谢! – Alpaca