【问题标题】:how to interrupt a long-running Web Service call如何中断长时间运行的 Web 服务调用
【发布时间】:2013-10-01 05:03:05
【问题描述】:

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

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

但是如果 web-service 结构不能改变,中断 web-service 调用的最佳方法是什么?

更新:

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

我正在使用的 Web 服务是基于 WCF 的。这些操作是只读的,因此如果被中断,则无法撤消任何操作。

【问题讨论】:

  • 为什么不异步调用 Web 服务?
  • 如果您将 WS 引用添加为 Add ServiceReference WsClient 您的客户端将有一个返回任务的 xxxAsync 方法。你可以轻松await就可以了
  • 所以如果我异步运行 WS 调用是我中断它的唯一选择Thread.Abort?
  • 为什么要打断它?只需设置执行超时。
  • @EkoostikMartin 我用“为什么”更新了这个问题。由于中断是用户调用的,我认为执行超时是不可能的。

标签: c# web-services


【解决方案1】:

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

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

http://msdn.microsoft.com/en-us/library/wyd0d1e5(v=vs.100).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多