Originariamente inviata da
djciko
potresti indicare soltanto il punto dove non funziona ?
Certo, il punto che non funziona è questo:
codice:
ListInsertAdempResponse.Campi[0].TestNomeCampo = "S_CAMPO1";
Nello specifico succede che il puntatore si perde dopo "Campi" -> ListInsertAdempResponse.Campi
e mi da l'errore:
codice:
System.NullReferenceException: 'Riferimento a un oggetto non impostato su un'istanza di oggetto.'
WcfDemo.InsertAdempList.Campi.get ha restituito null.
Ho visto che hai fatto una cosa bellissima aggiungendo il .add dopo Campi e volevo fare così anche io, ma purtroppo Visual Studio non me consente, dicendomi:
codice:
InsertAdempFields[]' non contiene una definizione di 'Add' e non è stato trovato alcun metodo di estensione 'Add' che accetta un primo argomento di tipo 'InsertAdempFields[]'. Probabilmente manca una direttiva using o un riferimento all'assembly.
Se aggiungo il codice di costruzione come il tuo, in fondo alla pagina, il .add mi viene consentito, però la variabile "ListInsertAdempResponse" perde la compatibilità di tipo quando vado a richiamare il metodo:
codice:
ResponseInsertAdempFields = test.ResponseInsertAdempFields(Token, ListInsertAdempResponse);
mi da l'errore:
codice:
Argomento 2: non è possibile convertire da 'testservice.InsertAdempList' a 'WcfDemo.InsertAdempList'
La corrispondenza migliore del metodo di overload per 'WcfDemo.Service1Client.ResponseInsertAdempFields(string, WcfDemo.InsertAdempList)' presenta alcuni argomenti non validi
Originariamente inviata da
djciko
intanto ho provato con una classe ed una paginetta in cui c'e' una label "lb", che viene correttamente valorizzata con "nome - mario // cognome - rossi", vedi se trovi qualche spunto (non ho capito perche' le proprieta' sono static) :
Ho tolto lo static, effettivamente non serviva...
Originariamente inviata da
djciko
e vedo correttamente valorizzata la label con i nomi dei campi ed i loro valori..
Ora, venendo alla definizione nel WebService, un get ed un set bastano, l'importante e' la decorazione e la corretta definizione della classe che riguarda la proprieta'...
Dovresti postare la parte del WS con la definizione precisa (vedo le classi duplicate nella pagina, non ho capito neanche questo punto)
Probabilmente hai ragione, è un problema di "decorazione" delle proprietà che non riesco a capire...
La definizione precisa che si trova nel riferimento web è questa:
codice:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using ComunicaCrypto;
namespace WcfDemo
{
[ServiceContract]
public interface IService1
{
[OperationContract]
ResponseInsertAdempList ResponseInsertAdempFields(string Token, InsertAdempList ListAdempResponse);
}
[DataContract]
public class ResponseInsertAdempList
{
bool Ok = true;
string MessageResult = "";
[DataMember]
public bool TestOk
{
get { return Ok; }
set { Ok = value; }
}
[DataMember]
public string TestMessageResult
{
get { return MessageResult; }
set { MessageResult = value; }
}
}
public class InsertAdempFields
{
string NomeCampo = "";
string ValoreCampo = "";
[DataMember]
public string TestNomeCampo
{
get { return NomeCampo; }
set { NomeCampo = value; }
}
[DataMember]
public string TestValoreCampo
{
get { return ValoreCampo; }
set { ValoreCampo = value; }
}
}
public class InsertAdempList
{
List<InsertAdempFields> campi = new List<InsertAdempFields>();
[DataMember]
public List<InsertAdempFields> Campi
{
get { return campi; }
set { campi = value; }
}
}
}
Nel file di configurazione del WebService (che si è creato in automatico dopo aver aggiunto il web reference) invece ho
La funzione che richiamo:
codice:
public ResponseInsertAdempList ResponseInsertAdempFields(string Token, InsertAdempList ListAdempResponse);
e le proprietà della "InsertAdempList":
codice:
namespace WcfDemo
{
[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();
public ExtensionDataObject ExtensionData { get; set; }
[DataMember]
public InsertAdempFields[] Campi { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName);
}
}
Per le classi duplicate non ho capito bene, forse intendi tutte quelle istanze che avevo creato e poi commentato?
C'era un po' di confusione in effetti... adesso riposto la pagina del codice con solo le informazioni strettamente necessarie
Grazie mille per il tuo aiuto!
Raimondo