none
Como retornar un DataTable desde WCF service RRS feed

  • Pregunta

  • Buenos dias,

    Estoy realizando un wcf, donde deseo retornar una tabla que tiene más de 20 columnas.

    Lo estoy haciendo de la siguiente manera 

    <ServiceContract()>
    Public Interface IFactura
    
     
       
        <OperationContract>
        Function GetFactura(ByVal IdA As Integer, ByVal Tipo As Integer) As ObtenerFactura()
    End Interface
    
    
    <DataContract> _
    Public Class ObtenerFactura
        <DataMember> _
        Public Property FacturaTable() As DataTable
            Get
                Return m_FacturaTable
            End Get
            Set(value As DataTable)
                m_FacturaTable = value
            End Set
        End Property
        Private m_FacturaTable As DataTable
    End Class


    y mi funcion

     Private ConString As String = ConfigurationManager.ConnectionStrings("FacturaConnection").ConnectionString
        Private con As SqlConnection
        Private cmd As SqlCommand
        Private sda As SqlDataAdapter
        Private dt As DataTable
        Dim ds As New DataSet
        Private Fac As New ObtenerFactura
    
        Public Function GetFacturas(ByVal IdA As Integer, ByVal Tipo As Integer) As ObtenerFactura() Implements IFactura.GetFactura
    
            Using con = New SqlConnection(ConString)
    
    
                cmd = New SqlCommand("FacturaV", con)
                cmd.CommandType = Data.CommandType.StoredProcedure
                cmd.Parameters.Add("@IdAsiento", Data.SqlDbType.Int).Value = IdA
                cmd.Parameters.Add("@Tipo_Licencia", Data.SqlDbType.Int).Value = Tipo
    
    
                sda = New SqlDataAdapter(cmd)
                dt = New DataTable()
                sda.Fill(ds)
                dt = ds.Tables(0)
                Fac.FacturaTable = dt
    
    
                Return Fac
            End Using
        End Function
    


    pero me sale el siguiente error

    Error 1 Un valor de tipo 'wcfFacturas.ObtenerFactura' no se puede convertir en '1-matriz dimensional de wcfFacturas.ObtenerFactura'. C:\Users\wcfFacturas\Factura.svc.vb 35 20 wcfFacturas

    Me estoy guiando por esta pagina http://deepak-sharma.net/2012/03/07/how-to-return-a-datatable-from-wcf-service/

    gracias por su tiempo!!!


    AngelaMar Bogotá, Colombia

    jueves, 21 de noviembre de 2013 16:14

Respuestas

  • Es un problema de paréntesis. Tu función devuelve un ...As ObtenerFactura(). Los páréntesis del final indican que lo que quieres devolver es un Array de objetos del tipo ObtenerFactura. Pero luego dentro del procedimiento devuelves un único ObtenerFactura (y no un Array).

    Basta con que quites los dos paréntesis al final de la función. Y lógicamente, también habrá que quitarlos en el OperationContract. De esa manera, devolverás un DataTable (que es lo que deseas hacer), en lugar de una matriz de DataTables, que es legal pero probablemente no es lo que pretendías.

    • Marcado como respuesta AngelaMar lunes, 25 de noviembre de 2013 13:34
    jueves, 21 de noviembre de 2013 20:39