У моего коллеги возникла следующая проблема:
Приложение Silverlight имеет список идентификаторов и выполняет вызов службы WCF для каждого из них, чтобы найти объект, соответствующий этому идентификатору.Соответствующий объект затем возвращается в приложение Silverlight через асинхронный обработчик «выполнено».Вызовы на стороне Silverlight выполняются в цикле, и WCF выполняет некоторый доступ к базе данных, находит и обновляет объект и возвращает его.Затем обработчик завершенных событий Silverlight перехватывает возврат и заполняет объекты обратно в коллекцию.
Проблема в том, что по какой-то причине список объектов, полученных обратно, является одним и тем же объектом.Используя точки останова, приложение Silverlight отправляет правильные объекты, WCF получает и возвращает правильные объекты, но при получении объектов обратно приложение Silverlight продолжает получать один и тот же объект снова и снова (но возвращается правильное количество объектов).
Пример ниже, чтобы проиллюстрировать проблему (упрощенная версия, а не фактический код):
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
и, наконец, (упрощенная) сервисная функция 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
Мы нашли способ обойти эту проблему, просто отправив и получив коллекцию в целом, но нам все равно было бы любопытно узнать, в чем причина первоначальной проблемы.