我可以取消对WebService的同步调用吗?

时间:2011-01-10 10:19:59

标签: c# .net web-services

我正在为WebService创建一个客户端,而WebService的一个方法是上传方法。对此方法的调用是在BackgroundWorker中完成的,并出现一个带有ProgressBar的对话框。 但我希望用户能够中止文件的上传。 我试图调用Abort()方法。调用Abort时,会在WS上载调用中的BackgroundWorker上启动异常,如预期的那样。问题是服务器完成调用的大部分时间并将文件添加到数据库中。

还有另一种方法可以中止WS调用吗?

2 个答案:

答案 0 :(得分:2)

一旦发出请求,就无法告诉客户端调用中止的阶段 - 因此很可能请求已到达服务器并且服务器已经在处理它。因此,即使您可以从客户端中止,服务器也已经处理了请求。这同样适用于异步Web请求。完整的证明解决方案是有补偿交易,即在这种情况下,中止应该调用服务器来删除文件(如果文件不存在,服务器不应该引发错误)。

答案 1 :(得分:0)

VinayC是对的,一旦服务启动,服务器进程就会接管。如果您正在批处启动请求或有一些可以中断的循环,那么您可以创建另一个服务调用来取消初始请求。取消请求只是设置一些在启动请求中检查的变量。

但是你也想要做VinayC提到的完整的证明解决方案,因为取消请求可能在服务器端的启动请求完成之后才会出现。