繁体   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