访问Web Service时WPF应用程序中的SOAP异常

时间:2017-01-16 07:07:51

标签: c# asp.net wpf web-reference

我正在学习C#,在其中一项任务中,我必须在使用WPF应用程序和Web引用单击按钮时将Access文件中的数据显示到DataGrid中。

有一个我无法解决的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;
    }

以上代码正在创建错误 - 无法将类型'object []'隐式转换为'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.TypeDesc.CheckSupported()\ n在System.Xml.Serialization.TypeScope.GetTypeDesc(Type type,MemberInfo source) ,Boolean directReference,Boolean throwOnError)\ n在System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(Type type)\ n at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name,String ns,Object o,Boolean xsiType)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write2_queryDBResponse上的Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n,String ns,Object o,Boolean isNullable,Boolean needType)\ n (对象[] P)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(对象objectToSerialize,XmlSerializationWriter作家)\ n在System.Xml.Serialization.XmlSerializer.Serialize(的XmlWriter的XmlWriter,对象o,XmlSerializerNamespaces命名空间,字符串encodingStyle,String id)\ n ---内部异常堆栈跟踪的结尾--- \ n在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces namespaces,String encodingStyle,String id)\ n at在System.Web.Services.Protocols的System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object [] returnValues)\ n的System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object [] returnValues,Stream outputStream)\ n .WebServiceHandler.Invoke()\ n ---内部异常堆栈跟踪结束---“}

1 个答案:

答案 0 :(得分:0)

  1. 在名为Student的Web服务端创建一个类,其中包含要发送给客户端的所有属性。
  2. 将此类标记为可序列化。
  3. 将DB对象属性逐个映射到此Student类。
  4. 从服务中,不返回ArrayList,返回ArrayList();
  5. 让我知道这是否有效。