如何使用 ASP.NET C# 在使用 ajax 完成 Web 服务时生成警报

Posted

技术标签:

【中文标题】如何使用 ASP.NET C# 在使用 ajax 完成 Web 服务时生成警报【英文标题】:How to generate alert on completion of web service with ajax using ASP.NET C# 【发布时间】:2021-04-21 15:00:44 【问题描述】:

我不确定是否可以做我要求的事情(花了一些时间研究它但没有成功)。

我有一个调用 Ajax 函数的 ASP.NET C# 页面,该函数又调用 Web 服务来运行冗长的 Python 脚本。我没有等待 Ajax 调用完成,而是运行 python,显示进程正在运行的 Toast 并让用户继续导航。

但是,在成功完成 Web 服务功能(运行 python 后)后,我想提醒用户该过程已经完成(无论用户现在导航到哪个页面)。我有兴趣再次从 Web 服务调用 Toast(不确定这是否可行),但这是二等奖。一等奖是发送一些通知,表明该过程已成功完成(如果完成,则失败)。

这是否可能,或者我是否需要回复成功邮件之类的内容。

非常感谢。

【问题讨论】:

【参考方案1】:

关于唯一真正“简单”的方法是,如果您“幸运”并且正在使用网络表单,并且您有一个母版页。对于每个到页面的导航,首先是母版页加载事件。因此,您有一个为您网站上的每个网页运行的公共区域/代码存根。

因此,当该例程完成时,您可以说设置一些 session() 值,因此您在母版页中的代码可以每次检查 session() - 如果该过程完成(您更新一些标志/设置在 session()) 中,然后您可以通过脚本管理器注入 toast 消息。该消息只会在用户导航时出现,但您可以说在母版页中包含一个 iframe - 和一个检查会话值的计时器 - 例如每 5 秒一次。

以上是关于唯一“简单”且实用的方法。您还可以通过在您的应用程序中采用 signalR 来发送(拥有)推送通知。 signalR 的问题是,在大多数情况下,每个页面都需要“一些”javascript 代码 - 所以再一次,如果您拥有或正在使用母版页,那么将 signalR 引入您的站点是可能的(但我不考虑为您的网站采用 signalR 非常简单)。

所以,当那个长时间运行的过程完成后 - 它必须在您的网站上调用一个 web 方法 - 并且该方法会更新 session() 值,然后您的母版页可以每隔 5 次检查该会话值秒,如果设置了“完成”标志,那么它可以显示一条消息。

信号R https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr

我认为母版页中的计时器(带有 iFrame)可能是最少的工作量,因为在项目中引入的 signalR 非常少。但是,如果您没有可以“重新检查”应用程序中所有网页的状态的公共页面(例如自定义菜单栏)或位置,那么您必须在每个网页中引入一些代码 - 这就是不是一个实用的想法,也不是一个伟大的想法。所以,如果你有一个母版页 - 那么计时器的想法,或者也许咀嚼signlR并将其引入你的网站是我会考虑的一条道路。

我有一个用户点击页面的情况,在该页面中我必须获取一些 PDF 文档,并为用户显示 PDF“缩略图”。加载 PDF 和创建缩略图的处理时间? (我只创建一次 - 将它们保存在 sql server 中)。大约需要 5 秒 - 如果有 6 个或更多文档,可能需要 10 秒。

所以,我启动了一个新的处理器线程来处理 PDFS。我的网格视图在一个面板中,我每 1 秒检查一次 session() 标志。但是,一旦呈现所有 pdf 缩略图,我就会停止表单上的计时器(在该更新面板中)。

由于网页的无状态特性,传输完成状态的唯一实用“点”是 session()。如果计时器 + session() 对您来说不实用,那么您必须硬着头皮考虑为此采用 signalR。对我来说,使用 timer + session() 的想法是快速的工作,但对于此类任务,使用 signalR 更可取。

【讨论】:

以上是关于如何使用 ASP.NET C# 在使用 ajax 完成 Web 服务时生成警报的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 和 C# 中手动进行 AJAX 调用

在 ASP.NET MVC 中使用 AJAX 方法时使用 C# 控制器重定向到页面

Asp.net 使用 Ajax 上传多个文件

我需要使用 C# 和 ASP.Net 构建一个非常轻量级的 Ajax 引擎。你有啥建议?

如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?

如何在 asp.net Web 应用程序中使用 jquery ajax 使用 Web 服务