我想用Web服务创建一个Queue。 这是我的代码:
public class Service1 : System.Web.Services.WebService
{
Queue myQueue = new Queue();
[WebMethod]
public void push(int item)
{
if (myQueue == null)
myQueue = new Queue();
myQueue.Enqueue(item);
}
[WebMethod]
public int pop()
{
if (myQueue != null)
{
if (myQueue.Count != 0)
{
return (int)myQueue.Dequeue();
}
}
return -1;
}
}
push()方法工作正常,但是当我调用pop()来检索数据时,它总是返回-1
我的代码问题是什么?
答案 0 :(得分:1)
将myQueue
声明为static
。 (static Queue myQueue = new Queue();
)因为似乎每次调用都会创建Service1
的新实例。
答案 1 :(得分:1)
正如I4V所说,静态可以完成这项工作,但请务必防止同时打电话。无需在push中手动实例化myQueue,因为声明保证实例可以使用。
public class Service1 : System.Web.Services.WebService
{
static Queue myQueue = new Queue();
[WebMethod]
public void push(int item)
{
lock(myQueue)
{
myQueue.Enqueue(item);
}
}
[WebMethod]
public int pop()
{
lock(myQueue)
{
if (myQueue.Count != 0)
{
return (int)myQueue.Dequeue();
}
return -1;
}
}
}
此外,请考虑使用通用队列,因此您不必继续进行投射。它更安全,更快捷。 http://msdn.microsoft.com/en-us/library/7977ey2c.aspx
// before class declaration
using System.Collections.Generic;
// replaces myQueue declaration
static Queue<int> myQueue = new Queue<int>();
// later, in pop - myQueue already returns ints, so no casting needed
return myQueue.Dequeue();