Bonjour à tous.
Je souhaiterai obtenir votre aide sur un problème sur lequel je bloque depuis quelques jours.
Je souhaite, via mon service WCF, faire transiter un objet dit "complexe" (contenant autre chose que des bool, int, double string etc...) entre le service et son client.
Mon service est hébergé actuellement dans une application console et le client dans une application WPF toutes deux sur la même machine.
Voici les classes que j'utilise et qui contiennent mes données. L'architecture de mon application m'impose de lier ces classes à des interfaces.
Voici le contrat de mon service :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 [DataContract] public class ClassSimple: IClassSimple { [DataMember] public string Name{ get; set; } [DataMember] public double Value { get; set; } [DataContract] public class ClassComplexe: IClassComplexe, IList<IClassSimple> { [DataMember] public List<IClassSimple> ListClassSimple{ get; set; } ... }
Et son implémentation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 [ServiceContract] public interface IMonService { [OperationContract] ClasseSimple GetClasseSimple(); [OperationContract] ClasseComplexe GetClasseComplexe(); }
La communication semble bien se passer entre le client et le serveur puisque lorsque j'appelle la fonction GetClasseSimple() depuis mon client, je récupère bien l'objet attendu. Par contre, lorsque je fais appelle à la fonction GetClasseComplexe(), le code côté serveur est bien executé côté serveur mais au moment de "return" l'objet instancié, une Exception de type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)] public class ServiceImplementation : IMonService { public ClasseSimple GetClasseSimple() { var simple = new ClasseSimple(); simple.Name = "Test"; simple.Value = 2; return simple; } public ClasseComplexe GetClasseComplexe() { var simple1 = new ClasseSimple(); simple.Name = "Test1"; simple.Value = 1; var simple2 = new ClasseSimple(); simple.Name = "Test2"; simple.Value = 2; var complexe = new ClasseComplexe(); complexe.Add(simple1); complexe.Add(simple2); return complexe; } }est levée avec les informations suivantes :"System.ServiceModel.CommunicationException"
Message :
InnerException :La connexion de socket a été abandonnée. Ceci peut être causé par une erreur lors du traitement de votre message, par le dépassement du délai d'attente de réception par l'hôte distant ou par un problème de ressource réseau sous-jacent. Le délai d'attente de socket local était '00:00:59.9020000'.
J'ai essayé d'ajouter les attributs suivants à mon service mais rien n'y fait :Une connexion existante a dû être fermée par l’hôte distant
Quelqu'un aurait il une idée sur l'origine de mon erreur?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [ServiceKnownType(typeof(ClasseSimple))] [ServiceKnownType(typeof(ClasseComplexe))]
Merci d'avance!
Partager