2010-09-20 47 views
1

考慮下面的代碼..如何傳遞到對象網絡服務和消費該web服務

[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; } 
    } 


} 

私人的ArrayList studentList =新的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

,能得到任何的異常/錯誤?您沒有調用Web服務的GetStudent()方法。如果我們從Web服務返回C#ArrayList,我們是否可以真正從其他平臺的客戶端使用相同的ArrayList?說Java客戶端? – Shekhar 2010-09-20 09:15:11

+0

是的,我知道..但事情是我不能指定這樣的東西.. ArrayList studentList = new ArrayList(); studentList = client.GetStudent();此代碼段不起作用!任何想法..? – smartcode 2010-09-20 10:34:35

回答

0

問題是您的Web服務不是無狀態的。每次調用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(); 
} 
+0

:: Nop ..問題仍然存在。它說..「不能隱式轉換類型'Consuming_WS.MyServiceRef.ArrayOfAnyType'到'System.Collections.ArrayList'」......任何想法.. ?? – smartcode 2010-09-24 12:30:25

+0

請參閱我上面添加的示例以解決此問題。問題是您在Web服務界面中使用ArrayList。 – 2010-09-24 13:42:56