从控制器事件(无客户端请求)向视图发送数据 ASP.NET MVC 4

Posted

技术标签:

【中文标题】从控制器事件(无客户端请求)向视图发送数据 ASP.NET MVC 4【英文标题】:Sending data to a view from a controller event (without client request) ASP.NET MVC 4 【发布时间】:2013-07-22 17:39:49 【问题描述】:

这个问题似乎是菜鸟,但我一直在谷歌搜索,也在这个论坛上,我找不到我要找的东西。

我在 Controller 中有一个 SonimMQ 对象处于监听模式,所以当我收到一条或多条消息时,我会解析它们并希望将它们发送到我的 查看(可以是实时更新的网格或图表)。有没有办法在没有客户端请求的情况下将数据从控制器事件(在本例中为 _OnReceiveData SonicMQ 事件)发送到视图?

我知道我可以使用 jQuery (setTimeout) 实现一个计时器,用于从控制器中提取数据,但我只想知道是否有其他方法可以实现。

我也读过jQuery .Controller,但它似乎只适用于鼠标和键盘事件,而不适用于“控制器事件”。

我在这里找到的最接近的答案是this one,但它使用 jQuery setTimeout。

也许这是一个范式问题,因为我是一名桌面应用程序开发人员,我正试图像在桌面应用程序模型中一样解决这个问题。我刚刚开始进行网络开发。所以,如果这个问题很明显,请原谅。

感谢您的帮助。谢谢!

【问题讨论】:

如果你需要实时通信,可以查看signalR (signalr.net) 否则,客户端偶尔轮询也没问题。 【参考方案1】:

我认为您在使用网络套接字。请看这个链接 So... ASP.NET MVC and WebSockets?

SignalR 看起来是目前最好的选择。

【讨论】:

SignalR 绝对是 OP 要求的最佳选择。 非常感谢史蒂夫。我会检查 SignalR,看来这就是我正在寻找的在 web 应用程序开发中的实时更新。【参考方案2】:

我会说简短的回答是否定的,但我需要更多关于这个问题的背景信息。

你能分享一些代码吗?

我猜 SonimMQ 是长时间运行的服务,在这种情况下是消息队列。

控制器的寿命不会超过请求(通常一次几秒钟)。每个请求都是相互隔离的(在大多数情况下,有一些方法可以跨请求共享数据)

如果您正在寻找一个长时间运行的进程,您可以使用服务,例如 Windows 服务。这有点 hacky,但您可以使用 HttpCache API 并设置超时。

桌面开发人员过渡到网络的最困难的概念是网络的无状态性。在桌面世界中,您可以根据事件存储状态和触发操作。在网络世界中,情况并非如此。在很多方面,它是网络之美,但它也是网络的诅咒,因为最终我们想要网络上的桌面体验。

【讨论】:

非常感谢,查克。 “控制器的寿命不长于请求”这改变了我对 Web 开发的看法(并证实了我的范式问题)。 (:

以上是关于从控制器事件(无客户端请求)向视图发送数据 ASP.NET MVC 4的主要内容,如果未能解决你的问题,请参考以下文章

无法使用javascript向ASP.NET web api Controller发送http POST请求

ASP.Net Core 3.1 - 从控制器向部分视图模态传递值?

从 MVC 中控制器中的不同方法向视图发送消息

从 ASP.NET Core 中的控制器操作运行后台任务

从 WCF 服务向网站发送数据

Asp.Net 将大量数据从视图发送到控制器