C# 如何中断长时间运行的Web服务调用

C# 如何中断长时间运行的Web服务调用,c#,web-services,C#,Web Services,我正在处理一个web服务调用,它可能需要几秒钟到几分钟才能完成。它构造并返回请求的数据。现在,对于长时间运行的WS调用,用户界面(WinForms)变得没有响应;用户无法取消该操作 解决这个问题的理想方法(我认为)是将操作分成两个web服务调用:第一个是请求,第二个是获取状态或可用数据 但是如果web服务结构无法更改,那么中断web服务调用的最佳方法是什么 更新: WS调用可以异步进行。如果用户想要取消操作,那么我希望减轻服务器未完成的工作(而不是让线程正常完成并丢弃响应)Thread.Abor

我正在处理一个web服务调用,它可能需要几秒钟到几分钟才能完成。它构造并返回请求的数据。现在,对于长时间运行的WS调用,用户界面(WinForms)变得没有响应;用户无法取消该操作

解决这个问题的理想方法(我认为)是将操作分成两个web服务调用:第一个是请求,第二个是获取状态或可用数据

但是如果web服务结构无法更改,那么中断web服务调用的最佳方法是什么

更新:

WS调用可以异步进行。如果用户想要取消操作,那么我希望减轻服务器未完成的工作(而不是让线程正常完成并丢弃响应)
Thread.Abort()是一种可能性,但我想知道是否有更好的方法


我使用的web服务是基于WCF的。这些操作是只读的,因此如果被中断,没有什么可以撤消的。

您可以生成异步代理类来实现此功能

请查看以下链接以获取示例


为什么不异步调用web服务呢?如果您将引用添加到WS-as
AddServiceReference
WsClient
中,您的客户端将有一个
xxxAsync
方法返回任务。您可以轻松地
wait
。如果异步运行WS-call,这是我唯一可以中断它的选项吗?为什么您需要中断它?只需设置一个执行超时。@EkoostikMartin我用“为什么”更新了这个问题。由于中断是用户调用的,我认为执行超时是不可能的。