2011-09-06 57 views
3

我想在MVC .NET中使用SSE制作一个Feed应用程序。我正在浏览网页,但我找不到在MVC中实现SSE的示例或方法。我开发了一个非常肮脏的解决方案,其中一个View调用一个控制器,调用第二个视图,第二个视图将推到第一个视图。我希望有人能够帮助。谢谢。如何使用.NET在MVC3中实现服务器发送的事件?

回答

1

看看SignalR。设置并运行起来非常简单,ASP.NET中有很多示例可帮助您入门。

1

如果ASP.NET WebApi是一个选项,您可以检出我的库ServerSentEvents4Net。该代码在Github上,也可在Nuget上获得。

+0

如何避免为每个连接的客户端阻止ASP线程?据我所知,服务器必须保持对每个客户端的响应。我看到的一些不好的例子在控制器动作中使用了一个无限循环,但是这将永远不会起作用。我只是想知道你是如何做到的。 –

0

下面是使用以实现为例(它应该工作的罚款MVC3也) 控制器部分:

public ActionResult Index() 
     { 
      ViewBag.Message = "SSE WITH ASP.NET MVC"; 
      return View(); 
     } 
     public ActionResult Message() 
     { 
      var result = string.Empty; 
      var sb = new StringBuilder(); 
      sb.AppendFormat("data: {0}\n\n", DateTime.Now.ToString()); 
      return Content(sb.ToString(), "text/event-stream"); 

     } 

查看部分:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
     <script type="text/javascript"> 

      function contentLoaded() { 
       var source = new EventSource('home/message'); 
       //var ul = $("#messages"); 
       source.onmessage = function (e) { 

        var li = document.createElement("li"); 
        var returnedItem = e.data; 
        li.textContent = returnedItem; 
        $("#messages").append(li); 
       } 
      }; 

      window.addEventListener("DOMContentLoaded", contentLoaded, false); 
     </script> 
     <h2><%: ViewBag.Message%></h2> 
     <p> 
      SSE WITH ASP.NET MVC 
     </p> 
     <ul id="messages"> 
     </ul> 

输出:

enter image description here

相关问题