假设您有一个ASP.NET MVC4Web API项目。当您通过URL调用其中一个资源时,它会等待一段指定的时间来获取性能监视数据,然后在完成后以JSON形式返回所有数据。然而,在输入URL和过程完成之间,有没有一种动态返回数据的方法,即。每秒检索性能数据并将其显示在浏览器中。
问题是:据我所知,任何人似乎都知道,通过URL调用API资源是静态的。这意味着,在资源检索完所有信息之前,JSON不会出现,这不是我想要的。我希望能够在API资源检索数据时不断更新浏览器中的JSON。
因为我在一个仓库类和一个控制器类中工作,所以Javascript不是一个选择。我试过使用SignalR,但显然在这种情况下不起作用,特别是因为我不能使用Javascript。
有没有可能通过调用API的URL来获取实时数据?
一个很好的例子:谷歌地图。通过URL调用Google Maps API的唯一方法是需要一个“静态”地图,该地图显示特定位置的单个图像。没有任何形式的交互。如果你想要一个动态的,“实时”的地图,你需要构建一个web应用程序,并在你的应用程序中使用一个视图页面中的Javascript来使用API资源。没有办法通过URL调用它。
发布于 2012-09-03 11:16:06
您可以将一个老式的ASP.Net IHttpHandler实现组合在一起,而不考虑MVC控制器和路由流水线。http://support.microsoft.com/kb/308001。然后,您将拥有对响应流的完全访问权限,您可以根据自己的需要进行缓冲或不缓冲。但是,您必须考虑是否要将工作线程占用那么长时间,如果您计划或多或少地连续传输,那么您一定要在等待存储库的进一步响应时使用IAsyncHttpHandler。
话虽如此,Web API也支持异步,但它有点复杂。如果您计划按时间发送数据,那么如果您计划最终拥有一些JavaScript客户端,那么我强烈建议您再看看SignalR,它可以完成所有这些开箱即用的操作。这要容易得多。
如果你真的想用Web API编写异步的东西,这里有几个参考资料可能会对你有所帮助;
http://blogs.msdn.com/b/henrikn/archive/2012/02/24/async-actions-in-asp-net-web-api.aspx
这个看起来就是你需要的;http://blogs.msdn.com/b/henrikn/archive/2012/04/23/using-cookies-with-asp-net-web-api.aspx
但是,为了在示例中使用PushStreamContent()类,您在System.Net.Http.dll中找不到它,您需要从http://aspnetwebstack.codeplex.com/SourceControl/list/changesets每晚构建的Web API栈中获取它
祝你好运!
发布于 2012-09-02 22:21:54
我认为您所要求的是一种基于HTTP的流媒体机制。当然,这样做需要发送未知内容长度的响应。
This question处理这种分块传输编码,这可能是解决方案的一部分。由于不知道客户端是什么,我不能说它将如何处理您想要通过的JSON。
问得好。
发布于 2012-09-02 22:22:57
当然,只要您愿意,就可以开始将响应流式传输回浏览器。它通常是有缓冲的,但它不是必须的。我以前就用过这个技巧。事实上,SignalR在一些操作模式中做了一些类似的事情,尽管我应该补充(现在我已经重读了您的问题),尽管HTTP支持这一点,但在Web API控制器中默认情况下不会很明显。我认为你需要在响应处理中降低一点,这样你就可以刷新缓冲区,而不是简单地从你的web方法返回一个POCO,如果你是这个意思的话。
从本质上讲,您需要在收集完每条信息后编写和刷新缓冲区,所以我不认为您能够使用典型的模型这样做。我认为您需要一个自定义消息处理程序http://www.asp.net/web-api/overview/working-with-http/http-message-handlers来获取有效负载才能做到这一点。
我很好奇,你说你想发回JSON,但是你不允许使用JavaScript?
https://stackoverflow.com/questions/12240053
复制