2014-01-29 69 views
3

我有一個Web服務,我想從我的一個asp.net類中調用。 我可以成功調用我的web服務。但現在我需要異步調用此服務。我需要調用它,而不是等待服務完成執行。我不需要處理來自服務的響應,也不需要驗證服務是否成功執行。我想要的只是能夠致電該服務,並可以自由地做其他事情。如何通過ASP.Net以「火警和遺忘」的方式調用Web服務

+2

您沒有向我們展示'PerformTaskAsync()'的代碼。你確定它實際上是異步執行的嗎? –

+0

另請注意,您正在將正在調用'PerformTaskAsync()'的對象封裝在'using'塊中,這似乎有問題;要麼在任務完成之前離開'使用'塊的範圍,要麼等待任務完成,然後離開'使用'塊的範圍,這兩者都不可取。你有沒有考慮過簡單地把它整合到自己的線程中,還是使用'BackgroundWorker'?或者可能使用'async'' await'? –

+0

嘗試** async await **,但瀏覽器仍然等待服務完成執行。還沒有嘗試過BackgroundWorker。 – Administrateur

回答

3

一種方法是使用IsOneWay財產上OperationContract屬性,像這樣:

[OperationContract(IsOneWay=true)] 
public void SomeMethod(string someValue); 

如果設置爲true,該操作將不會返回的消息。請注意,標記爲單向的方法不能有返回類型或refout參數(這是有道理的)。它也不應該與異步調用混淆,因爲它不是一回事(例如,如果需要一段時間才能獲得連接,單向調用可能會阻塞客戶端)。

請參閱OperationContractAttribute.IsOneWay Property瞭解更多信息。

3

您需要異步使用Web服務。 Goto和檢查

AddServiceReference -> Advance -> generate asynchronous operations. 
這個異步回調事件將提供給您的每一個方法 假設後

你有ABC方法在你的服務的時候,你會被消耗它作爲同步這些方法將提供給您的應用程序

1>ABC (fire and wait for output) 
2>ABCAsync(fire and forget) 
3>ABC callback event(get fired <if ABCAsync is called> when data available in your application) 
+0

已經做到了。標題被修改了。我正在尋找使用Web服務實現「火災/遺忘」方案的方法。 – Administrateur

+0

我已經更新了答案請看看 –