Исключение SOAP в приложении WPF при доступе к веб-службе

Я изучаю C#, и в одном из заданий я должен отобразить данные из файла доступа в DataGrid при нажатии кнопки с помощью приложения WPF и веб-ссылки.

Есть исключение мыла, которое я не в состоянии решить, любая помощь ценится, спасибо заранее —

Веб-ссылка 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.Коллекции.ArrayList’

Следовательно, на основе предложения через интернет, изменил код, как показано ниже —

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

Теперь, кажется, нет ошибок, но исключение в нижеприведенной строке кода, которую я не в состоянии решить —

object obj = websrvc.queryDB();

{«Система.Сеть.Услуги.Протоколы.SoapException: серверу не удалось обработать запрос. —> Система.InvalidOperationException: произошла ошибка при создании XML-документа. —> Система.InvalidOperationException: System.Данные.Обычный.DataRecordInternal не может быть сериализован, поскольку у него нет конструктора без параметров.N в системе.XML.Сериализация.TypeDesc.CheckSupported ()n at System.XML.Сериализация.TypeScope.GetTypeDesc (type type, MemberInfo source, Boolean directReference, Boolean throwOnError)N в системе.XML.Сериализация.XmlSerializationWriter.CreateUnknownTypeException (Type type)n в системе.XML.Сериализация.XmlSerializationWriter.WriteTypedPrimitive (имя строки, строка ns, объект o, Логический xsiType)n в Microsoft.XML.Сериализация.GeneratedAssembly.XmlSerializationWriter1.Write1_Object (String n, String ns, Object o, Boolean isNullable, Boolean needType)n в Microsoft.XML.Сериализация.GeneratedAssembly.XmlSerializationWriter1.Write2_queryDBResponse (Object[] p)n в Microsoft.XML.Сериализация.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize (Object objectToSerialize, XmlSerializationWriter writer)N в системе.XML.Сериализация.XmlSerializer.Сериализация (XmlWriter xmlWriter, Object o, xmlserializernamespaces пространства имен, String encodingStyle, String id)n — Конец внутренней трассировки стека исключений — — — n в системе.XML.Сериализация.XmlSerializer.Сериализация (XmlWriter xmlWriter, Object o, xmlserializernamespaces namespaces, String encodingStyle, String id)N в системе.Сеть.Услуги.Протоколы.SoapServerProtocol.WriteReturns (Object[] returnValues, Stream outputStream)N в системе.Сеть.Услуги.Протоколы.WebServiceHandler.WriteReturns (Object[] returnValues)N в системе.Сеть.Услуги.Протоколы.WebServiceHandler.Invoke ()n — — — конец внутренней трассировки стека исключений —«}

1 ответ

    1. Создайте класс на стороне веб-службы с именем Student со всеми свойствами, которые вы хотите отправить клиенту.
    2. Отметьте этот класс как сериализуемый.
    3. Сопоставьте свойства объекта DB по одному этому классу Student.
    4. Из службы вместо возврата ArrayList верните ArrayList();

    Дайте мне знать, если это сработает.