C#을 배우고 있는데 하나의 할당에서 WPF 응용 프로그램 및 웹 참조를 사용하여 버튼 클릭시 Access 파일의 데이터를 DataGrid에 표시해야합니다.웹 서비스에 액세스하는 동안 WPF 응용 프로그램에서 SOAP 예외가 발생했습니다.
내가 해결할 수없는 오전 SOAP 예외는, 어떤 도움이 감사한다, 사전에 감사합니다 -
웹 참조 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;
}
위의 코드에서 오류가 생성됩니다 - 수 없습니다 암시 C를 에 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.TypeDesc.CheckSupported() \ n (System.Xml.Serialization) \ n System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException (형식 형식) \ n System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive (문자열 이름, 문자열 ns)에서 \ n 형식 : TypeScope.GetTypeDesc (형식 형식, , Object o, Boolean xsiType) \ n Microsoft.Xml.Serialization.GeneratedWriter1.Write1_Object (String n, String ns, Object o, 부울 isNullable, 부울 needType) \ n Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1. Write2_queryDBResponse (Object [] p) \ n Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize (Object objectSerialize, XmlSerializationWriter 작성기) \ n System.Xml.Serialization.XmlSeri에서 \ n alizer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces 네임 스페이스, String encodingStyle, String id) \ n - 내부 예외 스택 추적 끝 - \ n System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object System.Web.Services.Protocols.SoapServerProtocol.WriteReturns (Object [] returnValues, Stream outputStream) \ n System.Web.Services.Protocols.WebServiceHandler.WriteReturns (Object, String, String) [] returnValues은 \ n System.Web.Services.Protocols.WebServiceHandler.Invoke()에서 \ n ---
여기에 잘못된 예외가 있다고 생각합니다.중요한 것은'System.Data.Common.DataRecordInternal은 매개 변수없는 생성자가 없으므로 직렬화 할 수 없습니다. '인 것 같습니다. 이는 기본적으로 직렬화하려는 클래스가 매개 변수없는 생성자가 없으므로 직렬화 할 수없는'DataRecordInternal'을 사용한다는 것을 의미합니다. 데이터를 다른 (자체 제작) 클래스에 저장해야합니다. –
'dataGrid.ItemsSource = websrvc.queryDB();'는 어떻습니까? – Clemens
귀하의 솔루션은 이미 여기에 있습니다 : http : //stackoverflow.com/questions/26546339/why-exception-occured-when-method-in-webservice-return-arraylist-in-c- rq = 1 – tabby