我对 asp.net 和 C# 很陌生,所以请耐心等待。如果之前有人问过这个问题,我也很抱歉......如果是这样,请引导我到一个有帮助的页面。
我有的:
页:有4个更新面板
第一个 UpdatePanel 包含(项目)gridview、用户显示选项(对这个问题不重要)和执行数据库搜索的按钮,该搜索返回显示到网格的项目列表。用户在此网格上选择一个项目...
第二个 UpdatePanel 包含一个下拉列表,其中包含从 XML 加载的可用任务列表。用户将选择一个任务,该任务显示一堆可用的选项/参数(也从 XML 文件加载)到第二个更新面板中的另一个(参数)gridview。这里的Gridview总会有一行数据。我在这里使用 gridview 是因为它比创建动态控件更容易(每个任务的参数都不同)。用户可以在网格中输入参数值。用户单击添加按钮,任务被添加到第三个更新面板中的另一个网格视图中。
第三个 UpdatePanel 包含一个(任务)gridview,其中包含用户添加的所有任务。还有一个按钮可以批量运行所有任务。单击按钮时,它会通过(任务)gridview 寻找待运行的任务。对于每个挂起的任务,它调用一个适当地处理任务的 Web 服务。Web 服务将任务结果与日志输出一起返回。
4th UpdatedPanel 现在只包含一个显示从 Web 服务返回的日志输出的 div。
我想进一步研究但不知道如何是:
- 如何执行“异步”批处理作业?我想要实现的是,当用户单击批处理运行按钮时,第三个(任务)更新面板及其所有控件被禁用,而批处理作业在“幕后”运行。根据任务的不同,每个任务最多可能需要 5 秒。如果用户创建了 60 个任务,我认为这也会导致页面超时?
- 在批处理作业运行时,用户可以进一步搜索 (item) UpdatePanel 中的其他项目,并使用 (parameter) updatepanel 将新任务添加到 (task) updatepanel。
- (任务)UpdatePanel 将在作业运行时显示某种“正在进行的作业...”覆盖。
希望你能理解我的问题。非常感谢有人能提供一些指导和/或有关如何解决此任务的指示
更多信息:
使用框架 3.5
使用 Asp.net C# + Ajax
Web 服务是一个 solaris 盒子上的 gSoap
提前谢谢了。
对不起,我是菜鸟,我试图回复你的帮助,但发现我可以输入的字符有限。我现在只更新我自己的评论。
谢谢你的建议。抱歉回复晚了,前几天我一直在环顾四周并做了一些更改,让它与“PageAsyncTask”和“IAsyncResult”一起工作。我创建了一个将由页面调用的 Web 服务类。新的 Web 服务类将被称为 gSoap Web 服务。我已经设法以某种方式“异步”运行它。
我有一个执行的按钮:
protected void StartASyncJob()
{
PageAsyncTask task = new PageAsyncTask(
new BeginEventHandler(BeginAsyncCommandTask),
new EndEventHandler(EndAsyncCommandTask),
new EndEventHandler(AsyncCommandTaskTimeOut), null);
RegisterAsyncTask(task);
}
BeginAsyncCommandTask 将通过网格,获取第一个待处理任务并调用 Web 服务。
EndAsyncCommandTask 然后将检索返回结果,写出(日志)UpdatePanel。然后它将再次执行 StartASyncJob() 以寻找下一个待处理的记录。
所有这一切只有在页面上不做任何其他事情时才有效。如果我(在异步进程运行时)在(项目)gridview 中搜索更多项目或从(任务)下拉列表中选择一个新任务,则在异步 Web 服务进程完成之前,该事件不会触发。完成后,下拉列表或搜索事件会触发,我从 Web 服务返回的日志详细信息不会更新。
我猜'等待'是由'PageAsyncTask'从同一个页面线程'产生'引起的?
我原以为拥有“异步”网络服务将使用户一次可以做不止一件事,从而提供更好的用户体验。但似乎我错了和/或没有做对。
我没有尝试过您使用 QueueUserWorkItem 的建议;但在我这样做之前,请问它是否会产生与使用“PageAsyncTask”相同的效果。使用 QueueUserWorkItem 是否具有“从同一页面线程生成”的相同效果?
提前谢谢了。抱歉,如果我没有很好地解释自己,如果您需要我发布我的代码,请告诉我。