2017-01-16 120 views
0

我學習C#,並在分配的一個我必須顯示從Access文件中的數據導入時使用WPF應用程序和Web引用按鈕,點擊一個DataGrid。SOAP異常而訪問Web服務

存在SOAP異常這我不能夠解決的,任何幫助表示讚賞,在此先感謝 -

Web引用ASMX文件包含下面的方法,即在按一下按鈕叫 -

[WebMethod] 
    public ArrayList queryDB() 
    { 
     string selectStmt = "select * from Students"; 
     OleDbConnection conn_obj = new DBConnect().checkDBStatus(databaseLocation); 
     conn_obj.Open(); 

     OleDbCommand query = new OleDbCommand(selectStmt, conn_obj); 
     OleDbDataReader dbReader = query.ExecuteReader(); 

     ArrayList dbRecordList = new ArrayList(); 

     foreach (DbDataRecord dbRecord in dbReader) 
     { 
      dbRecordList.Add(dbRecord); 
     } 

     conn_obj.Close(); 
     return dbRecordList; 
    } 

WPF文件的代碼如下 - 「按鈕點擊方法」

private void GetData_Click(object sender, RoutedEventArgs e) 
    { 
     ArrayList datagridList = (ArrayList) websrvc.queryDB(); 
     dataGrid.ItemsSource = datagridList; 
    } 

上面的代碼是創建一個錯誤 - 不能隱ç onvert類型「對象[]」爲「System.Collections.ArrayList」

因此基於一個建議過網,改變下面的代碼 -

private void GetData_Click(object sender, RoutedEventArgs e) 
    { 
     object obj = websrvc.queryDB(); 
     ArrayList datagridList = (ArrayList) obj; 
     dataGrid.ItemsSource = datagridList; 
    } 

現在,似乎有沒有錯誤,但在下面的代碼行,這我不能夠解決一個例外 -

object obj = websrvc.queryDB(); 

{「System.Web.Services.Protocols.SoapException:服務器無法處理請求。 ---> System.InvalidOperationException:生成XML文檔時發生錯誤。 ---> System.InvalidOperationException:System.Data.Common.DataRecordInternal無法序列化,因爲它沒有無參數構造函數。\ n在System.Xml.Serialization的System.Xml.Serialization.TypeDesc.CheckSupported()\ n。 TypeScope.GetTypeDesc(類型類型,源的MemberInfo,布爾directReference,布爾throwOnError)\ n在System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(類型類型)\ n在System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串名稱,串NS ,對象o,布爾xsiType)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(字符串N,串NS,對象o,布爾ISNULLABLE,布爾needType)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1。在System.Xml.Serialization.XmlSeri上的Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(Object objectToSerialize,XmlSerializationWriter writer)\ n中的Write2_queryDBResponse(Object [] p)\ n alize.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces命名空間,字符串encodingStyle,字符串id)\ n ---內部異常堆棧跟蹤結束--- \ n在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object O,XmlSerializerNamespaces命名空間,字符串的encodingStyle,字符串ID)\ n在System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(對象[] returnValues,流的OutputStream)\ n在System.Web.Services.Protocols.WebServiceHandler.WriteReturns(對象[] returnValues)\ n在System.Web.Services.Protocols.WebServiceHandler.Invoke()\ n ---內部異常堆棧跟蹤---「}結束

+0

我想你在這裏看錯了異常。重要的一個似乎是'System.Data.Common.DataRecordInternal無法序列化,因爲它沒有無參數的構造函數。這基本上意味着你試圖序列化的一些類使用'DataRecordInternal',它沒有無參數的構造函數,因此不能序列化。您需要將數據保存在不同的(自制)類中。 –

+0

'dataGrid.ItemsSource = websrvc.queryDB();'? – Clemens

+0

我認爲你的解決方案已經在這裏:http://stackoverflow.com/questions/26546339/why-exception-occured-when-method-in-webservice-return-arraylist-in-c?rq = 1 – tabby

回答

0
  1. 上創建web服務側的一類命名學生擁有您想要發送給客戶的所有房產。
  2. 將此類標記爲可序列化。
  3. 將DB對象屬性逐個映射到此Student類。
  4. 從服務,而不是返回ArrayList,返回ArrayList();

讓我知道這是否正常工作。