我目前正在开发一个ASP .Net项目。我有一个搜索按钮,按下它后,会建立与WCF的连接,然后检索数据。我想添加一个取消按钮,我想在按下取消按钮时取消搜索过程。问题是我不能打断回发,所以不管我做什么,我都不能在过程中间停止搜索。我试图通过调用以下内容从javascript刷新页面:location.reload(true);
。但它不会工作。它会等到回发完成后重新加载页面。我按下取消后也试图中止WCF连接,但结果是一样的。有人可以帮帮我吗?
答案 0 :(得分:0)
好的,我们终于找到了答案。首先,我们发现如果回发已经完成,我们无法阻止它。我们可以取消搜索的时间窗口的唯一方法是从WCF服务获取数据的时间(注意,客户端发出数据请求,然后请求被转发到WCF服务,然后是WCF service从数据库中获取数据)。一旦从WCF服务返回请求,就可以做任何事情(据我们所知)取消搜索过程。
我们每次请求数据时都尝试创建新的线程/任务。问题是,当创建新线程/任务时,与客户端的连接丢失,因为我们无法更新我们的组件(例如gridview)。
正如评论中所建议的那样,我们尝试通过AJAX调用来进行数据检索过程。 AJAX调用的问题是我们必须使用带有[WebMethod]
标记的静态方法,这使得无法使用我们的非静态成员。
最后,解决方案是:
1-我们将数据请求功能移到客户端(javascript)
2-我们使用了.asmx
服务。这使得从javascript调用非静态函数成为可能
这给了我们一个时间窗口,我们可以用它来取消搜索过程,从用户按下搜索到从WCF服务返回数据开始。
最后,您可以转到Call non-static method in server-side from client-side using JavsScript查看如何使用.asmx
服务。