![](/img/trans.png)
[英]How to avoid buffer overflow on asynchronous non-blocking WSASend calls
[英]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.