我的同事有以下问题:
Silverlight 应用程序有一个 ID 列表,并为每个 ID 调用 WCF 服务以查找与该 ID 匹配的对象。然后通过异步“已完成”处理程序将匹配对象返回给 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
我们通过发送和接收整个集合找到了解决问题的方法,但仍然对原始问题的原因感到好奇。