Mon collègue a le problème suivant:Appeler un service WCF dans la boucle de Silverlight, la valeur de retour dans le gestionnaire asynch est toujours le même
L'application Silverlight a une liste d'ID et fait un appel de service WCF pour chacun d'eux pour trouver l'objet correspondant à cet identifiant. L'objet correspondant est ensuite renvoyé à l'application Silverlight via un gestionnaire "completed" asynchrone. Les appels sur le côté Silverlight sont faits dans une boucle, et le WCF effectue un accès à la base de données, trouve et met à jour l'objet et le renvoie. Le gestionnaire Silverlight terminé saisit ensuite les retours et replace les objets dans une collection.
Le problème est que, pour une raison quelconque, la liste des objets reçus en retour sont tous le même objet. À l'aide des points d'arrêt, l'application Silverlight envoie les objets corrects, la WCF reçoit et renvoie les objets corrects, mais lors de la réception des objets, l'application Silverlight continue d'obtenir le même objet encore et encore (mais le nombre correct d'objets est renvoyé).
exemple ci-dessous pour illustrer le problème (une version simplifiée, pas le code réel):
Private Sub sendObjects(Byval sales As List(Of Integer))
For Each saleID As Integer in sales
AddHandler hlxService.SaveBankTransactCompleted, _
AddressOf SaveBankTransactCompleted
hlxService.SaveBankTransactAsync(saleID)
End For
End Sub
Private Sub SaveBankTransactCompleted(
sender As Object,
e As SaveBankTransactCompletedEventArgs)
RemoveHandler hlxService.SaveBankTransactCompleted, _
AddressOf SaveBankTransactCompleted
saleCollection.add(e.Result)
' Check if all objects have been returned.
CheckPaymentStatus()
End Sub
et enfin la (simplifiée) fonction de service WCF:
<OperationContract()>
Public Function SaveBankTransact(
ByVal saleID as Integer) As hlxSale
Dim newSale as hlxSale
newSale = findSaleById(saleID)
' Process some data from database, put values into newSale
Return newSale
End Function
Nous avons trouvé un moyen de contourner le problème en envoyant et recevant la collection dans son ensemble, mais serait encore curieux de savoir quelle était la cause du problème original.
Quelle liaison utilisez-vous pour WCF? –
@ ArnonRotem-Gal-Oz basicHttpBinding est ce qui est dans le ServiceReferences.ClientConfig, si c'est ce que vous vouliez dire? –