考虑以下代码..
[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();
任何想法.. ??
提前感谢!
答案 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();
}