簡體   English   中英

取消異步Web服務呼叫

[英]Cancel async web service calls

我需要能夠取消對Web服務的異步調用。 我擁有的一種解決方案是使用管理自己的線程,並使用SOAP客戶端中的同步方法。 這可以正常工作,並且需要一些更細粒度的線程管理。

如果我使用添加Web服務引用提供的兩種模式中的任何一種,請說:

var Client = new ASL_WS.SvcSoapClient()
IAsyncResult result = Client.BeginAuthenticateUser(Email, Password, new AsyncCallback(AuthCompleted));

要么

var Client = new ASL_WS.SvcSoapClient()
Client.AuthenticateUserCompleted += AuthCompleted;
Client.AuthenticateUserAsync(Email, Passsword);

這兩種模式中的任何一種都給我一種取消請求的方法嗎? 一個用例可能是:用戶登錄,但想在身份驗證調用完成之前取消。

當然,我可以通過修改傳遞給這些調用的asyncState並將其設置為禁用UI更新來實現不同的實現,但這不是我想要的。

我可以取消所有未完成的操作。 Client.Abort()是否取消此類操作。 如果有許多異步請求,都被取消怎么辦? 還有其他API方法可以做到這一點嗎?

是的,您可以使用中止方法,但請注意以下幾點。 您也可以使用CancelAsync

中止說明: http : //msdn.microsoft.com/en-us/library/aa480512.aspx

當您調用Abort方法時,所有未完成的請求仍將完成,但它們將完成並出現故障。 這意味着,如果您使用回調,則仍將為每個未完成的請求調用回調函數。 當調用EndInvoke方法(在本例中為包裝函數EndDelayedResponse)時,將生成錯誤,指示基礎連接已關閉。

CancelAsync示例: http : //www.codeproject.com/KB/cpp/wsasync.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM