windows - 异步 WCF 调用在客户端中处理不当

标签 windows vb.net winforms wcf asynchronous-wcf-call

这是场景。

我有一个遵循基于异步事件设计模式的 WinForm 应用程序(C#、.NET 3.5)。

主控件(MainResultControl)根据用户请求创建子控件(ResultControl)的多个实例。每个子控件都有一组独特的参数供用户选择。

然后每个子控件异步调用 WCF 服务:

WebServiceClient.GetResultsAsync(Parameters param)

每个子控件还注册了 Web 服务的 GetResultsCompleted 事件

WebServiceClient.GetResultsCompleted += _service_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 中过滤消息。

最好的方法是在客户端/服务器之间发送一些 MESSAGE BOX,这样您就可以轻松地在其中添加该 ID 以及错误消息。

类似的东西......

关于windows - 异步 WCF 调用在客户端中处理不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15532903/

相关文章:

windows - 戈朗 : winapi call with struct parameter

android - 在 Eclipse 中为 Android 项目构建 *.apk 文件时,aapt.exe 抛出未处理的异常

c++ - 如何保存MFC应用程序的布局设置?

c# - 替换现有图像时崩溃

windows - 编写 puppet 配置以克隆 github repo

VB.NET - 如何创建信息框

c# - 检查 nullable 是否有值的正确方法

.net - VB6 MSXML2 nodeTypedValue 的 .NET 4.6 等价物是什么?

c# - 如何验证 NRIC 的文本框

c# - Application.Run() 和 Form.ShowDialog() 有什么区别?