异步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套接字来处理多个异步请求。真的吗?

+0

添加VB.Net标记的可见性vb.net订户。 – EtherDragon 2013-03-20 20:58:06

您必须实现请求的某个唯一标记。

请参阅......您拥有控件A,因此您必须为该控件创建一个唯一标记/ ID并将其发送。

而在回调方法下,您必须返回标记/ ID,以便您可以过滤CONTROL中的消息。

最好的方法是,如果你将在客户端/服务器之间发送一些消息框,所以你可以很容易地在那里添加该ID和错误消息。

类似的东西...

+0

谢谢Peretz。这对我有意义。你知道任何涉及这个问题的设计文件或文章吗?我只是想知道这样的行为是否有意设计 - 结果是由不同的对象引用的,而不是被请求的对象引用的可能性。 – myroslav 2013-03-20 19:51:24

+0

@myroslav恐怕没有任何文档。在这里分享更多的代码来分析。 – 2013-03-20 19:58:01