gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:37:45 25 4
gpt4 key购买 nike

这是场景。

我有一个遵循基于异步事件设计模式的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com