これがシナリオです。
非同期イベント ベースの設計パターンに従う WinForm アプリケーション (C#、.NET 3.5) があります。
メイン コントロール (MainResultControl) は、ユーザーの要求に応じて子コントロール (ResultControl) の複数のインスタンスを作成します。各子コントロールには、ユーザーが選択する一意のパラメーター セットがあります。
次に、各子コントロールが WCF サービスを非同期的に呼び出します。
WebServiceClient.GetResultsAsync(Parameters param)
各子コントロールは、Web サービスの GetResultsCompleted イベントにもサインアップします
WebServiceClient.GetResultsCompleted += _service_GetResultsCompleted()
ここに私たちが直面している問題があります。ユーザーは、ResultControl が予期しないデータ セットを表示することがあると不満を漏らしています。要求したものとは関係ありません。
コントロールの 1 つのインスタンスが、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 ソケットを利用します。本当?