Bug
Serializzazione: WCF perchè sei tu WCF - Serialization: WCF why are you WCF

Ho passato gli utlimi 3 giorni a cercare di risolvere un problema di serializzazione di un DTO gerarchico (Customer che contiene un IEnumerable<Customer>) e non ne uscivo, il bello è che la stessa cosa l’ho fatta in decine di altri casi. Il massimo del dettaglio dell’errore che riuscivo ad ottenere era ExecutionEngineException che ovviamente non serviva a nulla. Poi con il tool Microsoft Service Trace Viewer sono riuscito a capire qualcosa in più.

Le cose da sottolineare sono:
- il DTO è gerarchico come già detto
- il DTO contiene delle property di tipo IEnumerable<T>

Detto questo, alla fine da questo errore “Object Graph for Type Xxx Contains Cycles and Cannot be Serialized if Reference Tracking is Disabled” sono riuscito ad arrivare a questo articolo: http://www.codingbliss.com/cb/?p=73

In sostanza la soluzione consiste nel markare il DTO con l’attributo DataContract (che dalla versione 3.5 SP1 di WCF non è più necessario) specificando DataContract(IsReference = true):
[DataContract(IsReference = true)]
public class Person
{
    [DataMember]
    public string Name
    { get; set; }

   [DataMember]
   public IEnumerable<Person> Children
   { get; set; }
}

E tutto si è messo a funzionare. Ora devo verificare se il problema si presenta anche con WCF 4.0. Spero di no e spero di non dover più perdere giornate a risolvere un problema (bug?) come questo :-).

Matteo Migliore.

Technorati Tags: ,,
Add Comment Filed Under [ WCF - Indigo Bug ]
Bug: i test di Visual Studio 2010 RC non copiano le reference – Bug: Visual Studio 2010 RC not copy references

Questo bug mi fa proprio impazzire! :) L’ho risolto con una patch al quanto fastidiosa.

In sostanza se viene referenziata una library o un project in un progetto di test ma non ne viene istanziato *esplicitamente* (non via refelection o da altre parti del codice usato dal test) semplicemente le dll non vengono copiate nella directory TestResults/Out, creando non pochi problemi.

Le soluzioni possibili sono almeno 3:
1. usare le pre-build action per copiare a mano le dll
2. creare un task action MSBuild per ogni progetto di test editando il file .csproj
3. fare tutto a manina da codice, prima che i test vengano eseguiti

Qui si trova la patch molto semplice che ho scritto, terza soluzione, a questo bug che avevo già riportato:
http://timeassistant.codeplex.com/SourceControl/changeset/view/42132#723529 Bug i test di Visual Studio 2010 RC non copiano le reference – Bug Visual Studio 2010 RC not copy references

Non mi piace ma intanto funziona. Tanto implementare il Layer Supertype anche nei test male non dovrebbe fare.

Matteo Migliore.

Add Comment Filed Under [ Visual Studio Bug ]
Bug con UnitTest in VS2010 RC - Bug with UnitTest in VS2010RC

Sto sperimentando questo bug Referenced assemblies in Unit Test are not copied in TestResults/Out con il progetto TimeAssistant che ho pubblicato su CodePlex: http://timeassistant.codeplex.com.

In sostanza nei progetti di test referenzio altri progetti e delle library esterne ma non tutte le DLL vengono copiate in TestResults/Out, per cui caricandoli dinamicamente via Reflection si ottiene un’eccezione.

Chi ha voglia di scaricare il progetto e votare… :).

Matteo Migliore.

Add Comment Filed Under [ Visual Studio Bug ]