因界面中須要讀取數據庫中表的內容,將服務契約的返回值類型設置爲SqlDataReader,以便供GridView調用。以下面的代碼所示:sql
[ServiceContract]
public interface IStudent
{
[OperationContract]
SqlDataReader getAllStudent(string strsql,string tablename);數據庫
}服務器
編譯時錯誤提示SqlDataReader沒法序列化。在網絡上找到的解釋(http://bbs.csdn.net/topics/80509708)是:網絡
在 ADO.NET 的三個基本數據對象 — DataReader、DataTable 和 DataSet 中,只有 DataSet 能夠與 Web 服務之間傳遞。這是由於,爲了與 Web 服務進行通訊,對象必須是可序列化的。(序列化是一個過程,它用於將對象的公共屬性轉換爲 XML,而且由於 XML 只是純文本,因此能夠將其從一個應用程序傳輸到另外一個應用程序,而且能夠穿越防火牆,從而克服了 COM 的主要障礙之一。)DataReader 沒法序列化,由於它們須要到服務器的開放鏈接。而且,由於 DataSet 處理 DataTable 的序列化以便進行封送處理,因此您也沒法傳遞單個 DataTable。spa
將SqlDataReader換成DataSet,問題解決,以下面的代碼所示:.net
[ServiceContract]
public interface IStudent
{
[OperationContract]
DataSet getAllStudent(string strsql,string tablename);對象
}get