Bonjour developpez.net,
ça fait quelques jours que j'essaye de faire appel à plusieurs services WCF pour chaque élément retourné d'un premier service.

Je travaille sur VS2010 avec EntityFramework 4, WCF et Silverlight.

donc pour mon cas j'ai 3 services :
- TierService getTiersByBlock() qui retourne une list<Maison>
- CellService getCellByTier(int idHouse) qui retourne une list<Room>
- BedService getBedByCell(int idRoom) qui retoune une list<Bed>

au fait j'ai créer une TierList qui est une Liste de Liste de Canvas qui va contenir une liste de Tier et pour chaque Tier, une liste de Canvas(Liste de Room).
Le Probleme c'est que lorsque j'exécute mon code en mode débogage pas à pas ou avec Fiddler, j'ai remarqué que l'appel services est dans cet ordre :
TierService
CellService
CellService
BedService
BedService
BedService
BedService

alors que ce que je veu :
TierService
CellService
BedService
BedService
CellService
BedService
BedService

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 
public partial class BlockDetails : UserControl
{
        static List<List<Canvas>> tiersList;
        static List<Canvas> cellList;
        static Canvas cell;
 
 
 
        public BlockDetails(string blockCode)
        {
            InitializeComponent();
            this.blockCode = blockCode;
            getTiersByBlock();
        }
 
        private void getTiersByBlock()
        {
 
            TierService.TierServiceClient client = new TierService.TierServiceClient();
            client.getTiersByBlockCompleted+=new EventHandler<TierService.getTiersByBlockCompletedEventArgs>(client_getTiersByBlockCompleted);
            client.getTiersByBlockAsync(this.blockCode);
            //client.
        }
 
        private void client_getTiersByBlockCompleted(object sender, TierService.getTiersByBlockCompletedEventArgs args)
        {
            tiersList = new List<List<Canvas>>();
            for (int i = 0; i < args.Result.Count; i++)
            {
                //this.tierPositionReference = i;
                createCells(args.Result[i].TIER_CODE);
                Console.WriteLine("Cell for This Tier Created");
                tiersList.Add(cellList);
            }
        }
 
        private void createCells(string idTier)
        {
 
            CellService.CellServiceClient clientCell = new CellService.CellServiceClient();
            clientCell.getCellByTierCompleted += new EventHandler<CellService.getCellByTierCompletedEventArgs>(client_getCellByTierCompleted);
            clientCell.getCellByTierAsync(idTier);
        }
 
        private void client_getCellByTierCompleted(object sender, CellService.getCellByTierCompletedEventArgs args)
        {
            cellList = new List<Canvas>();
            for (int i = 0; i < args.Result.Count; i++)
            {
                cell = new Canvas();
                cell.Name = args.Result[i].CELL_CODE.ToString(); ;
                cell.Height = 40;
                cell.Width = 83;
                cell.Background = new SolidColorBrush(Colors.Red);
                cell.VerticalAlignment = System.Windows.VerticalAlignment.Top;
                cell.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
                cellList.Add(cell);
                setBedIntoCell(Convert.ToInt32(args.Result[i].CELL_CODE));
 
            }
 
        }
 
        private void setBedIntoCell(int idCell)
        {
            BedService.BedServiceClient client = new BedService.BedServiceClient();
            client.getBedByCellCompleted+=new EventHandler<BedService.getBedByCellCompletedEventArgs>(client_getBedByCellCompleted);
            client.getBedByCellAsync(idCell);
        }
 
        private void client_getBedByCellCompleted(object sender, BedService.getBedByCellCompletedEventArgs args)
        {
            try
            {
                int xCell = 0;
                for (int i = 0; i < args.Result.Count; i++)
                {
                    Canvas bed = new Canvas();
                    ImageBrush myBrush = new ImageBrush();
                    myBrush.ImageSource = new BitmapImage(new Uri(@"./images/defaultCell.jpg", UriKind.Relative));
                    bed.Background = myBrush;
                    bed.Height = 40;
 
                    bed.Width = 40;
                    bed.Opacity = 1;
                    bed.Margin = new Thickness(xCell, 0, 0, 0);
                    xCell = xCell + 43;
                    cellList[cellList.IndexOf(cell)].Children.Add(bed);
 
                }
 
            }
            catch (Exception ex) { Error err = new Error(ex.Message); err.Show(); }
        }


es-que ceci a un rapport avec la synchronisation ( mes services n'ont pas en accès concurrent non ?) Quelqu'un à une piste