Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307

    Alla ricerca dell'istanza perduta

    Buongiorno a tutti,
    una nota: questo post sarebbe stato brevissimo se fosse possibile allegare uno ZIP con il codice
    Ho una classe "Cliente":

    Imports Microsoft.VisualBasic

    Public Class Cliente
    Public Sub New()
    MyBase.New()
    Me._code = "cod1"
    Me._name = "Mario"
    Me._surname = "Rossi"
    Me._IVA = "12345678901"
    Me._address = "mario@rossi.com"
    End Sub

    Public Sub New(ByVal codice As String, ByVal nome As String, _
    ByVal cognome As String, ByVal partitaIVA As String, ByVal email As String)

    Me._code = codice
    Me._name = nome
    Me._surname = cognome
    Me._IVA = partitaIVA
    Me._address = email
    End Sub

    Public Sub Finalize()
    Me._code = ""
    Me._name = ""
    Me._surname = ""
    Me._IVA = ""
    Me._address = ""
    MyBase.Finalize()
    End Sub

    Public Property _code() As String
    Get
    Return _code
    End Get
    Set(ByVal value As String)

    End Set
    End Property

    Public Property _name() As String
    Get
    Return _name
    End Get
    Set(ByVal value As String)

    End Set
    End Property

    Public Property _surname() As String
    Get
    Return _surname
    End Get
    Set(ByVal value As String)

    End Set
    End Property

    Public Property _IVA() As String
    Get
    Return _IVA
    End Get
    Set(ByVal value As String)

    End Set
    End Property

    Public Property _address() As String
    Get
    Return _address
    End Get
    Set(ByVal value As String)

    End Set
    End Property
    End Class

    ed un web service che la istanzia, creato col Code-behind:

    -- codice AnagraficaWS.asmx --
    <%@ WebService Language="vb" CodeBehind="~/App_Code/AnagraficaWS.vb" Class="Anagrafica" %>

    -- codice code-behind --
    Imports System.Web
    Imports System.Web.Services
    Imports System.Web.Services.Protocols

    <WebService(Name:="AnagraficaWS", _
    Description:="Web service di esempio che restituisce dei dati anagrafici dato un codice", _
    Namespace:="http://tempuri.org/ASP_NET/Anagrafica_WS/AnagraficaWS")> _
    <WebServiceBinding(ConformsTo:=WsiProfiles.BasicPr ofile1_1)> _
    <Global.Microsoft.VisualBasic.CompilerServices.Des ignerGenerated()> _
    Public Class Anagrafica
    Inherits System.Web.Services.WebService

    <WebMethod(Description:="Metodo per prelevare le informazioni di un cliente")> _
    Public Function getInfoCliente(ByVal Code As String) As String
    'Creo un nuovo oggetto cliente
    Dim customer As New Cliente("cod1", "Mario", "Rossi", "12345678901", "mario@rossi.com")
    Try
    'Controllo il codice di input con quello
    'istanziato all'interno dell'oggetto
    If customer._code.Equals(Code) Then
    Return "pippo"
    End If
    Catch ex As Exception
    Return ex.Message
    End Try
    End Function

    End Class

    Quale dei due costruttori usi, ho sempre un'eccezione: se leggete il codice d'errore, scoprirete che non viene mai creata un'istanza della classe.
    Secondo voi a che è dovuto?
    Kisses,

    Nat

  2. #2

    Re: Alla ricerca dell'istanza perduta

    prova a decorare la classe con l'attributo
    codice:
    <Serializable()> Public Class nomeclasse ...
    Originariamente inviato da natasha
    se leggete il codice d'errore, scoprirete che non viene mai creata un'istanza della classe.
    quale codice di errore?
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307

    Re: Re: Alla ricerca dell'istanza perduta

    Originariamente inviato da riccardone
    prova a decorare la classe con l'attributo
    codice:
    <Serializable()> Public Class nomeclasse ...
    No, non funziona.
    Un'aggiunta utile, comunque.

    quale codice di errore?
    "Object reference not set to an instance of an object."

  4. #4

    Re: Re: Re: Alla ricerca dell'istanza perduta

    Originariamente inviato da natasha
    No, non funziona.
    E ci credo. Il codice della classe e' sbagliato. Hai fatto delle proprieta' (che tra l'altro leggono il valore ma non lo restituiscono quindi tanto varrebbe farle readonly) che restituiscono se stesse. Una proprieta' pubblica di una classe serve per esporre all'esterno un campo privato. Oltre all'errore, non avrebbe senso per una proprieta' esporre se stessa non credi? tanto varrebbe dichiarare un semplice campo public tuavar as string e sarebbe sufficiente.
    Quindi es. di proprieta' (nota anche la nomenclatura che non e' un fattore da sottovalutare. In sintesi maiuscolo per i membri pubblici, minuscolo per quelli privati) scrivo a mano quindi occhio a eventuali erroretti
    codice:
    ...
    dim m_nome as string
    
    public readonly property Nome as string
    get
    return m_nome
    end get
    end property
    
    public sub new(_nome as string)
    m_nome = _nome
    end sub
    ...
    Saluti a tutti
    Riccardo

  5. #5
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Riccardone, così era semplice!
    Se adotto questo metodo, non ho modo di farmi restituire nella risposta del web service le proprietà della classe Cliente!

  6. #6
    :master: io ho provato a rileggere quanto hai appena detto ma non riesco a capire cosa tu voglia dire. In che senso
    Se adotto questo metodo, non ho modo di farmi restituire nella risposta del web service le proprietà della classe Cliente!
    boh. La classe che hai scritto e' sbagliata comunque sia che la usi normalmente sia che la usi dietro un webservice. es. questa proprieta'
    Public Property _code() As String
    Get
    Return _code
    End Get
    Set(ByVal value As String)

    End Set
    End Property
    e' sbagliata. Cambiala con
    codice:
    dim _code as string
    Public readonly Property Code() As String 
    Get 
    Return _code 
    End Get 
    End Property
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Alla fin fine, anche grazie al tuo aiuto, ho risolto il problema
    Non ci crederai, ma un WebMethod non restituisce una proprietà ReadOnly. Devo specificarla come proprietà "normale", a costo di non mettere niente nel Set, così:

    Dim _name As String

    Public Property Name() As String
    Get
    Return _name
    End Get
    Set(ByVal value As String)

    End Set
    End Property

    Grazie comunque per l'aiuto

  8. #8
    Originariamente inviato da natasha
    Non ci crederai, ma un WebMethod non restituisce una proprietà ReadOnly. Devo specificarla come proprietà "normale", a costo di non mettere niente nel Set, così
    Ve', non si finisce mai di imparare. X il resto rimane buono quanto detto forse con l'aggiunta che sarebbe meglio scrivere delle funzioni piuttosto che delle proprieta' cosi
    Saluti a tutti
    Riccardo

  9. #9
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Mmmm.... e mica hai torto, sai?
    Di sicuro, questo fatto delle proprietà ReadOnly non accessibili via Web Services è quantomeno fastidioso...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.