Вот сценарий.Асинхронные вызовы WCF неправильно обрабатываются клиентом
У меня есть приложение WinForm (C#, .NET 3.5), которое следует за шаблоном проектирования Asynchronous Event.
Главный элемент управления (MainResultControl) создает несколько экземпляров дочерних элементов управления (ResultControl) по запросу пользователя. Каждый дочерний элемент управления имеет уникальный набор параметров, который выбирает пользователь.
Каждый дочерний затем вызывает службы WCF асинхронно:
WebServiceClient.GetResultsAsync(Parameters param)
Каждый дочерний элемент управления также подпишется на GetResultsCompleted случае веб-службы
WebServiceClient.GetResultsCompleted + = _service_GetResultsCompleted()
Здесь проблема, с которой мы сталкиваемся. Пользователи жалуются, что иногда 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
EDIT:
Я консультировался некоторые люди, и кажется, что WCF имеет некоторые методы обеспечения того, чтобы событие, поднятое из службы, обрабатывалось соответствующим объектом (на клиентской машине), который его повысил. Идея заключается в том, что WCF использует различные IP-сокеты на клиентской машине для множества асинхронных запросов. Это правда?
Добавлен тег VB.Net для видимости подписчиков vb.net. – EtherDragon