异步WCF调用在客户端中处理不当
以下是方案。异步WCF调用在客户端中处理不当
我有一个WinForm应用程序(C#,.NET 3.5),遵循基于异步事件的设计模式。
主控件(MainResultControl)根据用户请求创建多个子控件实例(ResultControl)。每个子控件都有一组用户选择的独特参数。
每个子控件,然后调用WCF服务异步:
WebServiceClient.GetResultsAsync(Parameters param)
每个子控件也报名参加了Web服务
WebServiceClient.GetResultsCompleted + = _service_GetResultsCompleted()
这里GetResultsCompleted事件是我们面临的问题。用户抱怨有时ResultControl会显示意外的数据集 - 与他们所请求的数据无关。
控件的一个实例是否可能接收到其他实例在处理Web服务中引发的GetResultsCompleted事件时请求的结果?
谢谢。
下面是一些辅助代码(VB): 家长控制(MainResultControl)
Private Sub Submit_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles tbSubmit.Click
'a copy of MyRequestArgs is created with the details of request'
pnlResult.Controls.Add(new ResultsControl(_myRequestArgs))
End Sub
子控件(ResultsControl):
Public Class ResultsControl
Public _webRequestResult As WebRequestResult
Public Sub New(ByVal _requestArgs As MyRequestArgs)
Dim _service as MyWebService()
_service.GetTripSolutionsAsync(New TripPlannerParameters() _
With {.ApplicationID = _requestArgs.ApplicationID, _
.Arrival = _requestArgs.Parameters.Arrival, _
.Destination = _requestArgs.Parameters.Destination})
End Sub
Private Sub _service_GetTripSolutionsCompleted(ByVal sender As Object, _
ByVal e As MyWebService.ResultCompletedEventArgs) Handles _service.GetTripSolutionsCompleted
'Validation of correct results is done here
'Skipped for simplicity
_webRequestResult = DirectCast(e.Result, WebRequestResult)
End Sub
End Class
编辑:
我咨询了一些人们看来,WCF似乎有一些方法可以确保从服务引发的事件由引发它的适当对象(在客户端计算机上)处理。这个想法是 - WCF在客户端机器上使用不同的IP套接字来处理多个异步请求。真的吗?
您必须实现请求的某个唯一标记。
请参阅......您拥有控件A,因此您必须为该控件创建一个唯一标记/ ID并将其发送。
而在回调方法下,您必须返回标记/ ID,以便您可以过滤CONTROL中的消息。
最好的方法是,如果你将在客户端/服务器之间发送一些消息框,所以你可以很容易地在那里添加该ID和错误消息。
类似的东西...
谢谢Peretz。这对我有意义。你知道任何涉及这个问题的设计文件或文章吗?我只是想知道这样的行为是否有意设计 - 结果是由不同的对象引用的,而不是被请求的对象引用的可能性。 – myroslav 2013-03-20 19:51:24
@myroslav恐怕没有任何文档。在这里分享更多的代码来分析。 – 2013-03-20 19:58:01
添加VB.Net标记的可见性vb.net订户。 – EtherDragon 2013-03-20 20:58:06