从控制器事件(无客户端请求)向视图发送数据 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请求