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