使用Web服务实现Queue

时间:2013-03-16 20:51:31

标签: c# .net web-services

我想用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
我的代码问题是什么?

2 个答案:

答案 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();