如何将对象传递到Web服务并使用该Web服务

时间:2010-09-20 08:34:12

标签: c# web-services

考虑以下代码..

[Serializable]
public class Student
{
    private string studentName;
    private double gpa;

    public Student() 
    {

    }

    public string StudentName
    {
        get{return this.studentName;}
        set { this.studentName = value; }
    }

    public double GPA 
    {
        get { return this.gpa; }
        set { this.gpa = value; }
    }


}

private ArrayList studentList = new ArrayList();

    [WebMethod]
    public void AddStudent(Student student) 
    {
        studentList.Add(student);
    }

    [WebMethod]
    public ArrayList GetStudent() 
    {
        return studentList;
    }

我想使用简单的C#客户端表单应用程序来使用该Web服务。 我无法使用以下代码段获取学生列表..

MyServiceRef.Student student = new Consuming_WS.MyServiceRef.Student();

    MyServiceRef.Service1SoapClient client = new Consuming_WS.MyServiceRef.Service1SoapClient();

任何想法.. ??

提前感谢!

1 个答案:

答案 0 :(得分:0)

问题是您的网络服务不是无状态的。每次调用Web服务时,都会实例化Web服务类的新实例,并在此实例上调用该方法。调用实例时,将为studentList分配一个新的空列表。

您需要改变您的州管理。例如。

private static ArrayList studentList = new ArrayList();

可能会更好,但仍然不可靠。 查看http://www.beansoftware.com/asp.net-tutorials/managing-state-web-service.aspx处的文章,了解在Session(或Application)中存储状态的示例。

编辑:添加示例代码以避免使用ArrayList。

避免ArrayList和ArrayOfAnyType:

的问题
private List<Student> studentList = new List<Student>();

[WebMethod]
public void AddStudent(Student student) 
{
    studentList.Add(student);
}

[WebMethod]
public Student[] GetStudent() 
{
    return studentList.ToArray();
}