
Originariamente inviata da
djciko
C'e' molta confusione e molto codice in piu' su una cosa abbastanza semplice...
Innanzitutto, il cast non è possibile convertire da 'testservice.InsertAdempList' a 'WcfDemo.InsertAdempList'
ti da' questo errore perche' le due classi sono sotto due Namespace diversi (un namespace e' WcfDemo, l'altro è testservice).
Fidati di me, parti d'accapo con la paginetta, (cancella anche il reference al WS e rifallo) dando dei nomi --piu' facili-- alle variabili, senno' non ne esci....mi sa che ti stai incartando perche' stai scambiando una classe con un'altra, a causa della confusione del codice...
Si hai ragione... sarebbe bello poter andare in una parte di codice col name space "WcfDemo", aggiungergli il costruttore e -fregare- Visual studio.
Comunque le stringhe in input le prende, anche se hanno namespace diverso... quindi il problema deve essere che gli oggetti 'testservice.InsertAdempList' e 'WcfDemo.InsertAdempList' sono proprio diversi.. e forse ho capito il perchè.
Nel progetto "back-end" il codice:
codice:
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; }
}
}
Viene costruita una variabile di tipo "InsertAdempList.Campi[i].NomeCampo"
Mentre nel codice del WebService, dopo aver aggiunto i riferimenti, Visualstudio mi cambia di sua iniziativa il costrutto, che diventa:
codice:
[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);
}
In particolare noto la riga
codice:
"public InsertAdempFields[] Campi { get; set; }"
che mi sta dicendo che il "Campi" non è più una lista come prima
codice:
public List<InsertAdempFields> Campi {
get { return campi; }
set { campi = value; }
}
ma è solo un semplice vettore e quindi si aspetta una variabile di tipo "InsertAdempList.Campi[i]"
che infatti è proprio il punto dove si perde il puntatore nell'errore
codice:
System.NullReferenceException: 'Riferimento a un oggetto non impostato su un'istanza di oggetto.'
WcfDemo.InsertAdempList.Campi.get ha restituito null.
--------------------------------------

Originariamente inviata da
djciko
ci hai fatto caso che queste due (la prima non ho capito neanche cosa e')
public class InsertAdempList : IExtensibleDataObject, INotifyPropertyChanged
ha lo stesso nome di
public class InsertAdempList
{
List<InsertAdempFields> campi = new List<InsertAdempFields>();
?
... probabilmente è per questo che si confonde
La prima è nel codice che si è creato in automatico quando ho aggiunto le Web Reference al "Progetto WebService"
La seconda invece è nel codice che ho costruito nel "Progetto Back-End"
Sono due progetti differenti.
--------------------------------------
Comunque sia ti ringrazio infinitamente per la disponibilità e l'aiuto, ho sicuramente capito meglio il problema che c'è dietro, anche se non ho ancora la soluzione.
A mali estremi potrei andare a modificare il costrutto nel "Progetto Back-End" così da avere una variabile più semplice in input e che non mi venga sminchiata da VisualStudio.
Vi farò sapere 
Cordialmente,
Raimondo