Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Allora... ho ricreato il progetto da nuovo con solo la parte di codice problematica.

    Non ho risolto nulla, ma se i metadati non si devono toccare, allora forse sbaglio a creare le nuove istanze... perciò ti chiedo cortesemente, date le classi:

    codice:
    namespace asd
    {
        [DataContract(Name = "InsertAdempList", Namespace = "http://schemas.datacontract.org/2004/07/WcfDemo")]
        [DebuggerStepThrough]
        [GeneratedCode("System.Runtime.Serialization", "4.0.0.0")]
        public class InsertAdempList : IExtensibleDataObject, INotifyPropertyChanged
        {
            public ExtensionDataObject ExtensionData { get; set; }
            [DataMember]
            public InsertAdempFields[] Campi { get; set; }
    
    
            public event PropertyChangedEventHandler PropertyChanged;
        }
    }
    
    
    namespace asd
    {
        [DataContract(Name = "InsertAdempFields", Namespace = "http://schemas.datacontract.org/2004/07/WcfDemo")]
        [DebuggerStepThrough]
        [GeneratedCode("System.Runtime.Serialization", "4.0.0.0")]
        public class InsertAdempFields : IExtensibleDataObject, INotifyPropertyChanged
        {
            public ExtensionDataObject ExtensionData { get; set; }
            [DataMember]
            public string TestNomeCampo { get; set; }
            [DataMember]
            public string TestValoreCampo { get; set; }
    
    
            public event PropertyChangedEventHandler PropertyChanged;
        }
    }
    Come si fanno ad aprire correttamente delle nuove istanze tale per cui nel codice del main:

    codice:
    public partial class WebService : System.Web.UI.Page
    {
        public asd.InsertAdempFields Fields = new asd.InsertAdempFields();
        public asd.InsertAdempList Lista = new asd.InsertAdempList();
        
    
    
        protected void Page_Load(object sender, EventArgs e)
        {
            Lista.Campi[0].TestNomeCampo = "S_CAMPO1";
        }
    }
    La variabile "Lista.Campi[0].TestNomeCampo" riesce a compilarsi correttamente senza dare l'errore:

    codice:
    System.NullReferenceException: 'Riferimento a un oggetto non impostato su un'istanza di oggetto.'
    
    
    asd.InsertAdempList.Campi.get ha restituito null.
    ?

    Ps: se fai copia incolla di queste parti (anche nella stessa pagina) dovresti avere il mio stesso errore

  2. #12
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    ok, ma prima della prova, visto che le classi che riporti mi sembrano abbastanza strane, mi dici come hai fatto a creare il riferimento innanzitutto ? (fai attenzione a creare un "riferimento ad un servizio")

    Poi, hai poi provato con un tool tipo SOAP UI a connetterti al WS, testando se funziona ?

    All fine dell'operazione di "aggancio" del WS dovresti semplicemente vedere il riferimento, a cui hai dato tu il nome. La classe che non devi toccare dovrebbe essere contenuta in un file denominato "reference.cs" (che e' sotto il riferimento in esplora soluzioni) se non ricordo male.

    Per fare questo bisogna avere un Url o WSDL, puntare a quello (fase di "scoperta"), e creare un riferimento ad un servizio, che puo' star girando anche in locale. Visual Studio ha un wizard.

    Sicuro di aver fatto questa fase nel modo corretto ?

    Nelle classi generate, in alto dovresti vedere una cosa tipo:
    codice:
    // <auto-generated>
    //     Il codice è stato generato da uno strumento.
    //     Versione runtime:4.0.30319.42000
    //
    //     Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
    //     il codice viene rigenerato.
    // </auto-generated>



    -----
    E comunque, ti sconsiglio di chiamare le classi/pagine con nomi tipo "WebService", perche' sono parole riservate...
    Ultima modifica di djciko; 22-04-2018 a 23:50

  3. #13
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    tanto per essere sicuri di parlare della stessa cosa, ho fatto un riferimento ad un servizio pubblico, questo (se e' WCF dovrebbe essere quasi uguale la procedura):

    http://smartbear.com/samples/testcom...s/Service.asmx


    creato il riferimento in Visual Studio, nella pagina ASPX "wsClient" ho scritto:
    codice:
    public partial class wsClient : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                nsWS_Sample.SampleTestClass sampleTest = new nsWS_Sample.SampleTestClass();
                sampleTest.Name = "pippo";
    
    
                Response.Write(sampleTest.Name);
            }
        }

    (nsWS_Sample è il nome che ho dato io al Namespace quando il Wizard lo chiede, durante l'aggiunta del riferimento)
    Ultima modifica di djciko; 22-04-2018 a 23:47

  4. #14
    Quote Originariamente inviata da djciko Visualizza il messaggio
    ok, ma prima della prova, visto che le classi che riporti mi sembrano abbastanza strane, mi dici come hai fatto a creare il riferimento innanzitutto ? (fai attenzione a creare un "riferimento ad un servizio")
    Sembravano strane anche a me, vengono interpretate diversamente dal progetto originale e per questo volevo cambiarle... ma non posso perchè vengono da metadati

    Comunque il mio procedimento è stato esattamente questo:

    - aprire visual studio 2013
    - file -> nuovo -> sito web... -> Sito Web ASP.NET vuoto
    - click destro su "WebSite" -> Aggiungi -> Riferimento a servizio
    - mettere l'indirizzo "http://localhost/Wbservice/Service1.svc?wsdl" -> click su "Vai" e "Ok"

    A questo punto in Esplora soluzioni si aggiungono le cartelle:
    "App_WebReferences" -> "WcfDemo2" -> "Reference.svcmap"

    con l'ultima cartella contenente 6 file nominati:
    - configuration.svcinfo
    - configuration91.svcinfo
    - Service1.xsd
    - Service11.xsd
    - Service12.xsd
    - WBServiceDemo.wsdl

    Quindi da esplora soluzioni faccio aggiungi "Web Form" per ottenere le pagine aspx e aspx.cs

    In queste pagine vado a costruirmi i mio codice.

    Importante: 5 metodi su 6 funzionano.

    Solo il metodo della "insert" non mi funziona perchè in input richiede una lista in cui viene perso il riferimento:

    codice:
    asd.InsertAdempList.Campi.get ha restituito null.
    Quote Originariamente inviata da djciko Visualizza il messaggio
    Poi, hai poi provato con un tool tipo SOAP UI a connetterti al WS, testando se funziona ?
    Si, usando SOAP UI funziona.

    Quote Originariamente inviata da djciko Visualizza il messaggio
    All fine dell'operazione di "aggancio" del WS dovresti semplicemente vedere il riferimento, a cui hai dato tu il nome. La classe che non devi toccare dovrebbe essere contenuta in un file denominato "reference.cs" (che e' sotto il riferimento in esplora soluzioni) se non ricordo male.

    Per fare questo bisogna avere un Url o WSDL, puntare a quello (fase di "scoperta"), e creare un riferimento ad un servizio, che puo' star girando anche in locale. Visual Studio ha un wizard.

    Sicuro di aver fatto questa fase nel modo corretto ?

    Nelle classi generate, in alto dovresti vedere una cosa tipo:
    codice:
    // <auto-generated>
    //     Il codice è stato generato da uno strumento.
    //     Versione runtime:4.0.30319.42000
    //
    //     Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
    //     il codice viene rigenerato.
    // </auto-generated>
    Se 5/6 metodi funzionano, penso di aver fatto le cose in modo corretto... però non sono un esperto...

    I riferimenti che si creano sono quelli che ho descritto in precedenza nella cartella "App_WebReferences", però le classi non sono all'interno di un file "reference.cs", ma all'interno di "metadati", che non posso modificare, a cui accedo facendo F12 sulla classe che sto richiamando (es: public class "InsertAdempList")

    In una classe auto-generata trovo ad esempio:

    codice:
    #region Assembly App_WebReferences.dttt6qxf.dll, v0.0.0.0
    // C:\Users\buffo\AppData\Local\Temp\Temporary ASP.NET Files\root\2d0d2519\_shadow\8ba160b2\15900\App_WebReferences.dttt6qxf.dll
    #endregion
    
    
    using System;
    using System.CodeDom.Compiler;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Runtime.Serialization;
    
    
    namespace WcfDemo2
    {
        [Serializable]
        [DataContract(Name = "InsertAdempList", Namespace = "http://schemas.datacontract.org/2004/07/WcfDemo")]
        [DebuggerStepThrough]
        [GeneratedCode("System.Runtime.Serialization", "4.0.0.0")]
        public class InsertAdempList : IExtensibleDataObject, INotifyPropertyChanged
        {
            public InsertAdempList();
    
    
            [DataMember]
            public InsertAdempFields[] Campi { get; set; }
            public ExtensionDataObject ExtensionData { get; set; }
    
    
            public event PropertyChangedEventHandler PropertyChanged;
    
    
            protected void RaisePropertyChanged(string propertyName);
        }
    }
    Come vedi ho evidenziato in grassetto la parte dove viene definito il vettore "Campi" all'interno della classe, l'errore mi dice che il puntatore si perde più o meno in questo punto...

    All'interno della Classe A, c'è un vettore di Classi B... quindi dicevo prima, forse c'è da fare una "new" particolare per questo tipo di costrutti?

    Quote Originariamente inviata da djciko Visualizza il messaggio
    -----
    E comunque, ti sconsiglio di chiamare le classi/pagine con nomi tipo "WebService", perche' sono parole riservate...
    Ok non lo sapevo grazie... questo lo aggiusto, anche se non risolve il problema...
    Ultima modifica di RayanHawkins; 23-04-2018 a 10:05

  5. #15
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    allora mi sa che qualcosa non va nel sorgente del webservice (che a quanto vedo e' WCF).... il metodo incriminato funziona da SoapUI ?

    e poi, ultima cosa: ma la classe principale del webservice Service1.svc qual'e' ?

    finora non ho visto istanze di questa...
    Ultima modifica di djciko; 23-04-2018 a 11:20

  6. #16
    Sono riuscito a risolvere...... finalmente! ç_ç

    Il rimedio era aggiungere delle nuove istanze in un modo semplice ma che non conoscevo, ovvero all'interno della funzione scrivere:

    codice:
    ListInsertAdempResponse.Campi = new InsertAdempFields[16];
    
                ListInsertAdempResponse.Campi[0] = new InsertAdempFields
                {
                    TestNomeCampo = "S_CAMPO1" ,
                    TestValoreCampo = Request["campo1"]
                };

    l'istanza della classe principale era la prima cosa che avevo creato nel primo progetto
    codice:
    WcfDemo.Service1Client test = new WcfDemo.Service1Client();
    Vi ringrazio infinitamente!

  7. #17
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    ok, sono contento. infatti non istanziavi nessun oggetto nel singolo item, ma gli davi direttamente il valore..
    all'inizio ti avevo indicato un esempio che c'era quasi cosi come di seguito, VS continua a non fartelo fare ?

    codice:
    listaCampiInsert.Campi.Add(new InsertAdempFields { TestNomeCampo = "S_Campo1", TestValoreCampo = "Request["campo1"]" });

    (invece di dargli l'indice "0", l'Add ti fa fare l'aggiunta senza specificarlo)

    Ultima modifica di djciko; 23-04-2018 a 12:43

  8. #18
    Eh no, non me lo faceva fare perchè nei metadati importati la lista Campi viene trasformata in vettore e quindi non permette l'add.

    Ciao e grazie di tutto

  9. #19
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    uhm...vettori, array, liste etc permettono quel metodo, ma l'importante che hai risolto.

    ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.