MVC4 Razor实时更新视图

时间:2016-07-13 11:26:23

标签: asp.net-mvc-4 signalr real-time

我是一名相对的noob程序员,所以请提前道歉!

我正在使用MVC4和Razor编写,并且有一个用户选择视图,可能会导致从控制器进行许多Web调用。我想更新结果视图 这些Web服务调用返回的实时实时,虽然看起来控制器在更新模型之前等待所有Web调用完成 并渲染结果视图。我们试图使用异步并等待改进,但收效甚微。

我遇到的其他复杂情况是,我们正在使用内部框架并在网络连接返回时执行其他操作,例如记录\偶尔的数据库访问,所有这些 导致控制人员采取相当长的一段时间。

要将其置于上下文中,这是一个监控应用程序,因此根据用户选择,我们可能会有0 - >点击按钮即可进行数百次内部Web服务调用。

所以基本上我想知道如何最好地处理这个问题,例如实时更新MVC4视图,其中您有多个单独的Web服务调用,其中一些可能是 冗长的,例如最多60秒

我对如何改善事物的想法是

  1. 使用SignalR并在各个Web服务响应的位置,向结果屏幕广播更新〜但是我仍然遇到代码正在等待的问题 我的控制器在渲染视图之前调用webservices完成。

  2. 以避免等待控制器方法,例如' output = await pc.CallApproriateSCs(selectedServiceInfoDetails);'也许将所有的调用传递给一些内部堆栈并有一个计时器 弹出它们并在另一个类的另一个线程上处理它们,然后这可以让我的控制器立即显示默认的结果视图,让SignalR更新它 实时

  3. 这一切看起来有点像使用大锤来破解核桃,但MVC4肯定有一些更好的处理这种情况的方法吗?

    提前致谢,

    <磷>氮

    public virtual async Task<ActionResult> MultipleCommand(ManualSelectionVM model)
    {
        var viewObject = new ManualSelectionResultVM();            
    
        if (model != null)
        {
    
            var input = new ServiceInfo();
            //Retrieving serviceInfo object details from cache based on user selection, they are unique     
            List<ServiceInfo> selectedServiceInfoDetails = GetServiceInfoDetailsFromCache(GetSelectedServiceInfoIDs(model));
            List<ServiceOutputCdt> output = new List<ServiceOutputCdt>();                        
            IGenericPC pc = null;
    
            try
            {
                pc = PCFactory.Create<IGenericPC>();
                output = await pc.CallApproriateSCs(selectedServiceInfoDetails);
                viewObject = ConvertServiceOutputIntoVM(output);
            }
            finally
            {
                AICS.ARCHITECTURE.SERVICES.CLEANUP.CleanupSVC.Cleanup(pc);
            }
        }                
    
        return this.View(MVC.ManualSelection.Views.Result, viewObject);
    }
    

0 个答案:

没有答案