다음은 시나리오입니다.클라이언트에서 비동기 WCF 호출이 잘못 처리되었습니다.
비동기 이벤트 기반 디자인 패턴을 따르는 WinForm 응용 프로그램 (C#, .NET 3.5)이 있습니다.
주 컨트롤 (MainResultControl)은 사용자가 요청할 때 하위 컨트롤 (ResultControl)의 여러 인스턴스를 만듭니다. 각 자식 컨트롤에는 사용자가 선택하는 고유 한 매개 변수 집합이 있습니다.
WebServiceClient.GetResultsAsync(Parameters param)
각 자식 컨트롤은 또한 웹 서비스 여기
WebServiceClient.GetResultsCompleted + = _service_GetResultsCompleted()
의 GetResultsCompleted 이벤트에 가입하는 :
각 자식 컨트롤은 비동기 WCF 서비스 호출 우리가 직면하고있는 문제입니다. 사용자는 때때로 ResultControl이 요청한 것과 관련이없는 예기치 않은 데이터 집합을 표시한다고 불평합니다.
컨트롤의 한 인스턴스가 웹 서비스에서 발생한 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 소켓을 사용합니다. 그게 사실이야?
vb.net 가입자에게 공개 할 VB.Net 태그가 추가되었습니다. – EtherDragon