[C# 2] Serialization entre un service et une page ASP.Net

Voilà le topo,

J’ai une page ASP.Net qui doit communiquer avec un service windows. Les deux sont codés en C# avec framework .net 2.0 .

La communication se fait par des sockets, j’ai une classe communes aux deux applications qui stocke les deux données que j’ai besoin de transferer :

[code][Serializable()]
public class my_data
{
public string id_produit;
public string id_oeuvre;

	public my_data(string id_produit, string id_oeuvre)
	{
		this.id_oeuvre = id_oeuvre;
		this.id_produit = id_produit;
	}
}[/code]

La serialisation se passe bien, je serialise ça dans un NetworkStream que je flush() et j’ai bien une reception au niveau du service.

[code]public void envoyer(string serveur, int port)
{
//envoi d’une serialization binaire de l’instance
my_data d = new my_data(id_produit, id_oeuvre);
BinaryFormatter b = new BinaryFormatter();

	TcpClient envoi = new TcpClient(serveur, port);
	NetworkStream ns = envoi.GetStream();
	b.Serialize(ns, d);
	ns.Flush();

}[/code]

Le problème c’est la deserialization à la reception.

BinaryFormatter bf = new BinaryFormatter(); NetworkStream ns = client.GetStream(); my_data requete = new my_data("",""); if (ns.DataAvailable) { requete = (my_data)bf.Deserialize(ns); }

La dernière ligne lève une SerializationException : “Impossible de trouver l’assembly ‘App_Code.rrgsvpqf, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’”. L’aide MSDN sur cette exception m’a énormement aidé : “The exception that is thrown if an error occurs during serialization or deserialization.” Google ne m’a pas trop aidé non plus.

Quelqu’un a-t-il déjà eu à faire à ce genre de cas ? Est-ce que j’ai loupé quelque chose quelque part ?

Oui il te manque l’assembly dans laquelle ton objet “my_data” existe (horrible nom d’ailleurs). Vu le nom qu’il te file, tu as mis ton code dans le rep App_Code et tu as laisse asp.net compiler ton code a la volee dans une assembly qui aura donc forcement un nom/signature qui change a chaque compile, rendant la comm avec ton service quasi impossible. Avec la serialization binaire comme ca il faut pas que les objets soit “pareil”, il faut qu’ils soient strictement les meme, venant de la meme assembly.

Ton code ne respecte pas les règle de nommage C#, c’est pas très propre B)