2014-04-30 63 views
0

我找澄清WCF Web服務數據表和數據集的行爲。返回數據表和數據集

隨着ASMX Web服務,DataTable對象不能序列化,因此在Web方法不退還。我一直使用ASMX返回DataSets。

我移動到WCF服務,我想確認此行爲與返回的數據表和數據集是該技術是相同的。我的測試已經提出了這樣的建議,但我想確認這實際上是行爲,或者是否有某些我未能成功返回DataTable的行爲。

與返回的用戶定義類型的對象

而且,我一直沒能成功地返回一個數據表或數據集作爲一個用戶定義的類的公共屬性。

例如,與下面的測試類,從WCF服務返回類型CTestClass的對象返回的屬性DOB,名稱和YearsOfAge但未能返回MyDataSet。 DataSet是在構造函數中創建的。當我將GetDataSet函數作爲公共函數調用時,我的WCF Web服務成功地將DataSet返回給客戶端應用程序。

Public Class CTestClass 

Public Sub New() 
    m_myDataSet = Me.GetDataSet 
End Sub 

Private m_DOB As Date 
Public Property DOB() As Date 
    Get 
     Return m_DOB 
    End Get 
    Set(ByVal value As Date) 
     m_DOB = value 
    End Set 
End Property 

Private m_sName As String 
Public Property Name() As String 
    Get 
     Return m_sName 
    End Get 
    Set(ByVal value As String) 
     m_sName = value 
    End Set 
End Property 

Private m_iYearsOfAge As Integer 
Public Property YearsOfAge() As Integer 
    Get 
     Return m_iYearsOfAge 
    End Get 
    Set(ByVal value As Integer) 
     m_iYearsOfAge= value 
    End Set 
End Property 

Private m_myDataSet As DataSet 

Public ReadOnly Property MyDataSet() As DataSet 
    Get 
     Return m_myDataSet 
    End Get 
End Property 

Private Function GetDataSet() As DataSet 
    Dim ds As New DataSet 
    Dim dt As New DataTable 

    ' Create new DataTable instance. 
    Dim table As New DataTable 
    ' Create four typed columns in the DataTable. 
    table.Columns.Add("Dosage", GetType(Integer)) 
    table.Columns.Add("Drug", GetType(String)) 
    table.Columns.Add("Patient", GetType(String)) 
    table.Columns.Add("Date", GetType(DateTime)) 
    ' Add five rows with those columns filled in the DataTable. 
    table.Rows.Add(25, "Indocin", "David", DateTime.Now) 
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now) 
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now) 
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now) 
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now) 
    table.Rows.Add(500, "Paracetamol", "Simone", DateTime.Now) 

    ds.Tables.Add(dt) 

    Return ds 
End Function 

End Class 
+0

您需要爲序列化程序提供一個setter才能工作。 http://stackoverflow.com/questions/1702802/wcf-serialize-complex-objects-with-read-only-members – PatFromCanada

+0

因此,我的測試類不返回DataSet的問題與該屬性是隻讀? –

+0

有什麼方法可以讓我的服務從公共函數返回一個DataTable? –

回答

0

好的。刪除只讀屬性允許DataSet在我的自定義對象內返回。

,我能夠從一個公共方法,並從我的自定義對象中後明確地指定一個字符串值到DataTable的TableName屬性返回一個DataTable既是返回的對象。