Questo è uno strano problema che sto riscontrando con WCF durante il tentativo di inviare DataTable nella risposta. Ho il seguente contratto di servizio:Restituzione di oggetti DataTable con servizio WCF
[ServiceContract]
public interface ISapphireDataService {
[OperationContract]
DataTable LoadData(string query, DateTime start, DateTime end);
[OperationContract]
string LoadDataTest();
}
E la seguente implementazione dei metodi (dove provider è una classe che effettua la chiamata database e restituisce indietro un DataTable):
public DataTable LoadData(string query, DateTime start, DateTime end) {
//DataSet temp = new DataSet();
//temp.Tables.Add(provider.LoadData(query, start, end).Copy());
//return temp;
return provider.LoadData(query, start, end).Copy();
}
public string LoadDataTest() {
return "Hello World!";
}
Ora, quando lasciare in questo modo, ho sempre arrivare un errore quando si chiama il metodo LoadData (...): si è verificato
un errore durante la ricezione della risposta HTTP per http://localhost:8731/Design_Time_Addresses/DataProviderServiceLibrary/SapphireDataService/. Questo potrebbe essere dovuto al binding dell'endpoint del servizio che non utilizza il protocollo HTTP .
Ciò potrebbe anche essere dovuto a un contesto di richiesta HTTP interrotto dal server (probabilmente a causa dell'arresto del servizio).
Vedere i registri del server per ulteriori dettagli.
Questo è piuttosto strano perché il servizio è configurato per utilizzare wsHttpBinding, che presumo utilizza il propocol HTTP. Questo errore non si verifica se provo a chiamare il metodo LoadDataTest()!
Quindi quello che ho fatto è stato mettere questo tavolo che ho ottenuto dal database in un oggetto DataSet e ha funzionato! Nessun errore o qualcosa del genere. BUT, la tabella che è stata restituita nel DataSet era EMPTY. Tutti i campi erano Null e nessun dato è stato trasferito/de-serializzato correttamente, sembra :(
questo sembra essere un problema comune, ma io sono ancora vedere una risposta a questo che funziona. Tutte le idee?
Fondamentalmente solo una parola di consiglio: NON FARE ! :-) –