none
Error en VB.NET alguien que me oriente RRS feed

  • Pregunta

  • Estoy Tratando de consumir un ws desde vb.net, para lo cual debo llenar las structuras de entrada, no tengo mucho conocimiento de la herramienta

    el codigo es este

    Dim WS As ServiceReference3.hheeClient = New ServiceReference3.hheeClient()

            Dim strHHEEOperationResponse As New ServiceReference3.HHEEOperationResponse()
            Dim strHHEEOperationRequest As New ServiceReference3.HHEEOperationRequest()
            Dim strRespuesta As New ServiceReference3.Respuesta()
            Dim strcolab As New ServiceReference3.colab()
            Dim strdetalle As New ServiceReference3.detalle()

            WS.ClientCredentials.UserName.UserName = login.ToString()
            WS.ClientCredentials.UserName.Password = password.ToString()
            WS.Open()

            strdetalle.cod_hhee = "10006166"
            strdetalle.Inicio = "2019-11-01T09:00:00Z"
            strdetalle.Fin = "2019-11-01T20:30:00Z"
            strdetalle.Tip_Tpo = "9241"
            strdetalle.Hora_dia = "2"

            strcolab.effectiveStartDate = "2019-11-04"
            strcolab.cod_emp = "100061669241"
            strcolab.detalle(0) = strdetalle

    y al llegar a la ultima linea me aparece el error

    Error de servidor en la aplicación '/'.

    Referencia a objeto no establecida como instancia de un objeto.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.

    Error de código fuente:
    Línea 253:        strcolab.effectiveStartDate = "2019-11-04"
    Línea 254:        strcolab.cod_emp = "100061669241"
    Línea 255:        strcolab.detalle(0) = strdetalle
    Línea 256:
    

    Archivo de origen: C:\Proyectos_NET\WebApplicationBlumarWS\WebForm1.aspx.vb    Línea: 255

    Seguimiento de la pila:
    [NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.]

    miércoles, 6 de noviembre de 2019 14:13

Todas las respuestas

  • Habría que ver la definición de ServiceReference3.colab. Me imagino que dentro debe tener una propiedad llamada detalle que es de tpo array, porque sino no estarías llamando a detalle(0) pero esto hay que verificarlo examinando la definición porque si es otro tipo como por ejemplo una interfaz entonces las cosas son distintas.

    Pero si efectivamente es un array, entonces hay que inicializar el array usando New antes de poder meter valores en cualquiera de sus elementos. Esto es general para cualquier array en .Net, no tiene nada que ver el hecho de que casualmente este array se encuentre dentro de una clase proxy del servicio web.

    Una vez que sepas el tipo (examinando la definición de la clase, usa F12 en Visual Studio), y suponiendo que sea un array, inicialízalo así:

    strcolab.detalle = New ElTipoQueSea(numeroDeElementos)

    y entonces ya podrás hacer strcolab.detalle(0) = loQueSea

    miércoles, 6 de noviembre de 2019 16:04
  • Habría que ver la definición de ServiceReference3.colab. Me imagino que dentro debe tener una propiedad llamada detalle que es de tpo array, porque sino no estarías llamando a detalle(0) pero esto hay que verificarlo examinando la definición porque si es otro tipo como por ejemplo una interfaz entonces las cosas son distintas.

    Pero si efectivamente es un array, entonces hay que inicializar el array usando New antes de poder meter valores en cualquiera de sus elementos. Esto es general para cualquier array en .Net, no tiene nada que ver el hecho de que casualmente este array se encuentre dentro de una clase proxy del servicio web.

    Una vez que sepas el tipo (examinando la definición de la clase, usa F12 en Visual Studio), y suponiendo que sea un array, inicialízalo así:

    strcolab.detalle = New ElTipoQueSea(numeroDeElementos)

    y entonces ya podrás hacer strcolab.detalle(0) = loQueSea

    Te agradezco mucho en responder. aquí la clase cobab, donde detalle la parecer es un array

    **************************************************************************************

    Partial Public Class colab
            Inherits Object
            Implements System.ComponentModel.INotifyPropertyChanged
            
            Private effectiveStartDateField As String
            
            Private cod_empField As String
            
            Private detalleField() As detalle
            
            '''<remarks/>
            <System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, Order:=0)>  _
            Public Property effectiveStartDate() As String
                Get
                    Return Me.effectiveStartDateField
                End Get
                Set
                    Me.effectiveStartDateField = value
                    Me.RaisePropertyChanged("effectiveStartDate")
                End Set
            End Property
            
            '''<remarks/>
            <System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, Order:=1)>  _
            Public Property cod_emp() As String
                Get
                    Return Me.cod_empField
                End Get
                Set
                    Me.cod_empField = value
                    Me.RaisePropertyChanged("cod_emp")
                End Set
            End Property
            
            '''<remarks/>
            <System.Xml.Serialization.XmlElementAttribute("detalle", Form:=System.Xml.Schema.XmlSchemaForm.Unqualified, Order:=2)>  _
            Public Property detalle() As detalle()
                Get
                    Return Me.detalleField
                End Get
                Set
                    Me.detalleField = value
                    Me.RaisePropertyChanged("detalle")
                End Set
            End Property
            
            Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
            
            Protected Sub RaisePropertyChanged(ByVal propertyName As String)
                Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent
                If (Not (propertyChanged) Is Nothing) Then
                    propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName))
                End If
            End Sub


        End Class

    **************************************************************************************

    Si me indicas como debería quedar esta linea seria ideal. desde ya muchas gracias

    strcolab.detalle = New ElTipoQueSea(numeroDeElementos)

    miércoles, 6 de noviembre de 2019 17:40
  • Ahora he podido avanzar pero igual me da un error, el código que tengo ahora es el siguiente

    El WS que estoy consumiendo recibe de entrada 3 parametros

    "effectiveStartDate" que es un string

    "cod_emp" que es un string

    "detalle" que es un arreglo y que se aprecia donde lo estoy llenando. (strdetalle)

    Nota. Pueden ser muchos detalles y por eso es el arreglo.

    Dim WS As ServiceReference3.hheeClient = New ServiceReference3.hheeClient()
            Dim strHHEEOperationResponse As New ServiceReference3.HHEEOperationResponse()
            Dim strHHEEOperationRequest As New ServiceReference3.HHEEOperationRequest()
            Dim strRespuesta As New ServiceReference3.Respuesta()
            Dim strcolab(3) As ServiceReference3.colab
            Dim strdetalle As New ServiceReference3.detalle()

            WS.ClientCredentials.UserName.UserName = login.ToString()
            WS.ClientCredentials.UserName.Password = password.ToString()
            WS.Open()

            strdetalle.cod_hhee = "100061669241"
            strdetalle.Inicio = "2019-11-01T09:00:00Z"
            strdetalle.Fin = "2019-11-01T20:30:00Z"
            strdetalle.Tip_Tpo = "9241"
            strdetalle.Hora_dia = "2"

            strcolab(0) = New ServiceReference3.colab
            strcolab(0).effectiveStartDate = "2019-11-04"
            strcolab(0).cod_emp = "10006166"

            strcolab(0).detalle(0) = New ServiceReference3.detalle
            strcolab(0).detalle(0) = strdetalle

    y este es el error

    Error de servidor en la aplicación '/'.

    Referencia a objeto no establecida como instancia de un objeto.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.

    Error de código fuente:
    Línea 255:        strcolab(0).cod_emp = "10006166"
    Línea 256:
    Línea 257:        strcolab(0).detalle(0) = New ServiceReference3.detalle
    Línea 258:        strcolab(0).detalle(0) = strdetalle
    Línea 259:

    Archivo de origen: C:\Proyectos_NET\WebApplicationBlumarWS\WebForm1.aspx.vb    Línea: 257

    Seguimiento de la pila:
    [NullReferenceException: Referencia a objeto no establecida como instancia de un objeto.]
       WebApplicationBlumarWS.WebForm1.Button3_Click(Object sender, EventArgs e) in C:\Proyectos_NET\WebApplicationBlumarWS\WebForm1.aspx.vb:257

    desde ya gracias a quien quiera echarme una mano.

    miércoles, 6 de noviembre de 2019 21:46