Vb.net 从WCF web服务返回数据表和数据集

Vb.net 从WCF web服务返回数据表和数据集,vb.net,web-services,wcf,datatable,dataset,Vb.net,Web Services,Wcf,Datatable,Dataset,我希望能够澄清WCF web服务中数据表和数据集的行为 使用ASMXWeb服务,DataTable对象不可序列化,因此在web方法中不可返回。我总是使用ASMX返回数据集 我将转到WCF服务,我想确认返回数据表和数据集的行为与此技术相同。我的测试已经表明了这一点,但我想确认这实际上是一种行为,或者为了成功返回一个数据表,是否有我没有做到的事情 同样,在返回用户定义类型的对象时,我无法成功地将DataTable或DataSet作为用户定义类的公共属性返回 例如,对于下面的测试类,从WCF服务返回C

我希望能够澄清WCF web服务中数据表和数据集的行为

使用ASMXWeb服务,DataTable对象不可序列化,因此在web方法中不可返回。我总是使用ASMX返回数据集

我将转到WCF服务,我想确认返回数据表和数据集的行为与此技术相同。我的测试已经表明了这一点,但我想确认这实际上是一种行为,或者为了成功返回一个数据表,是否有我没有做到的事情

同样,在返回用户定义类型的对象时,我无法成功地将DataTable或DataSet作为用户定义类的公共属性返回

例如,对于下面的测试类,从WCF服务返回CTestClass类型的对象将返回属性DOB、名称和年份,但无法返回MyDataSet。数据集是在构造函数中创建的。当我将GetDataSet函数作为公共函数调用时,我的WCF web服务会成功地将数据集返回给客户端应用程序

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

嗯。删除只读属性允许在自定义对象内返回数据集


并且,在向DataTable的TableName属性显式分配字符串值之后,我能够从公共方法和自定义对象中返回DataTable作为返回对象

您需要为序列化程序提供一个setter。因此,我的测试类不返回数据集的问题与只读属性有关?是否有某种方法可以让我的服务从公共函数返回DataTable?是的,只读将不起作用,如果您在Google“wcf serialize DataTable”上搜索,您会发现它非常重要,为什么不返回数据集或更好的DTO呢。