Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在从服务器更新aspx页_C#_Asp.net_Web - Fatal编程技术网

C# 正在从服务器更新aspx页

C# 正在从服务器更新aspx页,c#,asp.net,web,C#,Asp.net,Web,目前我正在从事一个项目,其中一个网页将通过使用web服务启动一个3小时的数据传输过程。基本上,Id列表用于通知web服务将数据对象从一个数据库传输到另一个数据库 当我开始这个过程时,我希望允许用户保持控制。他必须能够看到当前进程有多远,并且能够按下取消按钮停止数据传输。所有这些都是从ASPX网页运行的 我发现,尝试异步运行进程不允许我像我所希望的那样更新用户界面。只有当整个过程完成时,我可能会面临另一个问题,即由于该过程需要大量时间,服务器对象可能会在某个时候刷新,这可能会导致我失去进度 我目前

目前我正在从事一个项目,其中一个网页将通过使用web服务启动一个3小时的数据传输过程。基本上,Id列表用于通知web服务将数据对象从一个数据库传输到另一个数据库

当我开始这个过程时,我希望允许用户保持控制。他必须能够看到当前进程有多远,并且能够按下取消按钮停止数据传输。所有这些都是从ASPX网页运行的

我发现,尝试异步运行进程不允许我像我所希望的那样更新用户界面。只有当整个过程完成时,我可能会面临另一个问题,即由于该过程需要大量时间,服务器对象可能会在某个时候刷新,这可能会导致我失去进度

我目前正在决定是否使用web服务器来处理数据传输。如果是,我当前的解决方案是使用任务异步运行流程,并使用客户端web调用(到aspx页面)更新客户端接口。我还在为我的工作对象实现IRegisteredObject接口


任何关于如何最好地解决这个问题的想法都是非常受欢迎的。我真的很想知道我的方向是否正确。

我的建议是,您创建一个WCF服务,该服务不在ASP.NET中托管,并让您的ASP.NET应用程序调用该服务来触发执行数据传输的长时间运行的作业。同时,您的ASP.NET应用程序通知用户它已触发作业,您可以公开服务上的其他终结点,ASP.NET应用程序可以通过用户请求查询这些终结点,以便提取和报告进度

web服务器一次只能为每个用户运行一个页面,因此,如果您希望在进程运行时与浏览器通信,则无法从请求运行进度。您需要将其作为独立的后台线程启动,以便能够完成启动流程的请求

之后,您可以向服务器发送请求,以轮询进程的状态或控制进程


如果可能,您应该完全在IIS之外运行该进程,例如作为控制台应用程序。这样,您只需跟踪web应用程序中有一个进程正在运行这一事实,例如,将该进程放入数据库中,这样它就可以在IIS回收过程中生存。

不,您不需要在ASP.NET中执行长时间运行的后台任务,因为您发现了许多其他原因。您可以使用类似Windows服务的服务,例如用于IPC的WCF来报告进度或取消操作,