Problema a trasferire una tabella tramite Web Service

domenica 26 aprile 2009 - 20.26

netaddicted Profilo | Newbie

Ciao a tutti,

non riesco ad ottenere una semplice data table richiamando in locale un web service
che ho sviluppato.

Ho provato con delle semplici stringhe e tutto va bene.

Con la data table, invece, non ottengo alcun errore, semplicemente il risultato della chiamata è un oggetto vuoto.

Ho provato a testare separatamente il web service, questo è il codice che genera una semplice data table
sul web service:

DataTable myTable = new DataTable("Table1");
DataColumn MyColumn = new DataColumn("Test");
myTable.Columns.Add(MyColumn);
DataRow myRow = myTable.NewRow();
myTable.Rows.Add(myRow);
myTable.Rows[0][0] = "Test This!";

return myTable;

Il test del web service funziona, in fase di debug riesco a visualizzare i dati della tabella quando mi ci
soffermo con il mouse in fase di interruzione.

E questo è il codice XML che risulta dalla chiamata:


<?xml version="1.0" encoding="utf-8" ?>
- <DataTable xmlns="http://tempuri.org/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1" msdata:UseCurrentLocale="true">
- <xs:complexType>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="Table1">
- <xs:complexType>
- <xs:sequence>
<xs:element name="Test" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <DocumentElement xmlns="">
- <Table1 diffgr:id="Table11" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<Test>Test This!</Test>
</Table1>
</DocumentElement>
</diffgr:diffgram>
</DataTable>

Il problema sorge quando richiamo il web service dal client (una semplice applicazione Win Form).

Questo è il codice della chiamata asincrona (che nel caso delle stringhe funziona):

private void btnDownload_Click(object sender, EventArgs e)
{
Service School_WS = new Service();
School_WS.GetSchoolsDataCompleted+=new GetSchoolsDataCompletedEventHandler(School_WS_GetSchoolsDataCompleted);
School_WS.GetSchoolsDataAsync();
}

public void School_WS_GetSchoolsDataCompleted(Object sender, GetSchoolsDataCompletedEventArgs e)
{

dataGridView1.DataSource = e.Result;

}

Qualcuno ha idea del perchè non restituisce la tabella ?

Grazie per l'aiuto
Francesco

Jeremy Profilo | Guru

Ciao Francesco.
Semplicemente perchè la DataTable non è un oggetto serializzabile.....a differenza del DataSet.

Facci sapere...
Ciao

netaddicted Profilo | Newbie

Infatti...poi ho capito.

Però non è subito chiaro...perchè Visual Studio permette l'invocazione del metodo e restituisce persino
l'XML se poi non me ne posso fare niente?

Ho risolto creando una classe che descrive il singolo record, ho messo le istanze della classe in un array e l'ho trasferito al client.

Una volta dall'altra parte ho deserializzato le istanze e le ho convertite in righe della datatable che ho collegato
alla Gridview.

Grazie e alla prossima, siete un punto di riferimento.

Francesco
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5