2010-03-27 10 views
2

Dans mon scénario, il existe un assembly côté client qui contient une classe (Task). Cette classe implémente une interface (ITask) connue sur le serveur. J'essaie d'envoyer un objet Task du client au serveur sans copier manuellement l'assembly du client sur le serveur..NET Remoting: Sérialiser l'objet et l'implémentation

Si je ne fais que sérialiser l'objet de tâche, le serveur se plaint évidemment de l'assemblage manquant. J'ai ensuite essayé de sérialiser typeof (tâche) .Assembly mais je ne pouvais pas le diviser sur le serveur. Ensuite, j'ai essayé de File.ReadAllBytes (typeof (tâche) .Assembly.Location) et enregistré dans un fichier temporaire sur le serveur, qui a lancé une exception sur Assembly.LoadFrom (@ ". \ Temporary.dll");

Pourquoi est-ce que je fais cela? Java RMI a une fonction intéressante pour demander l'implémentation d'un objet qui est reçu par l'intermédiaire de la communication à distance mais qui est "non connu" (cette JVM n'a pas le fichier * .class). Cela peut être utilisé pour un serveur de calcul qui ne connaît que l'interface d'une "tâche" contenant une méthode run() et télécharge l'implémentation de cette méthode à la demande. De cette façon, le serveur n'a pas besoin d'être changé pour de nouvelles tâches. J'essaie de réaliser quelque chose comme ça dans .Net.

+1

Pourquoi utilisez-vous la communication à distance? Il a été remplacé par WCF. –

Répondre

1

Jamais esprit, j'ai trouvé une manière qui fonctionne pour moi en utilisant l'événement AssemblyResolve et le chargement de l'ensemble directement à partir du tableau d'octets avec

AppDomain.CurrentDomain.Load(assemblyData); 

quelqu'un Juste en cas a le même problème.