簡體   English   中英

客戶端中異步WCF調用處理不當

[英]Asynchronous WCF calls are mishandled in the client

這是場景。

我有一個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中過濾消息。

最好的方法是,如果您將在客戶端/服務器之間發送一些消息框,以便您可以輕松地在其中添加該ID和錯誤消息。

像這樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM