首页 新闻 会员 周边

ASP.NET MVC 怎么在控制器函数执行完成之前返回流数据

0
悬赏园豆:5 [已解决问题] 解决于 2015-06-10 15:56

函数过程如下

 [HttpPost]
        public void InterFace(FormCollection collection)
        {
            try
            {
                StreamReader sr = new StreamReader(Request.InputStream);
                string recvData = sr.ReadToEnd();
                sr.Close();
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(recvData);
              
                WeiMessage.Message msg = MessageFactory.BuildMessage(doc);
                msg.OnEventIoHandler += MessageProc;
                Response.Write(msg.Handler());
                //不需要返回数据的处理过程
                //.......
            }
            catch (Exception ex)
            {
          
            }
        }

测试发现Response.Write(msg.Handler());之后客户端并没有立刻收到数据,似乎要等整个函数执行完之后才能收到数据。而我需要的是立刻返回数据,然后再把流数据做其他耗时处理。初涉ASP.NET MVC 求大侠指导

大芝麻的主页 大芝麻 | 初学一级 | 园豆:4
提问于:2015-06-10 15:19
< >
分享
最佳答案
0

Response.Flush();

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2015-06-10 15:30

你好,这个方法我试过,但是有个问题,似乎Flush之后依然没有立刻返回数据。我把返回数据之后的耗时操作延时为10秒,结果Flush之后要过大概5-6秒时间才返回数据。很奇怪。

大芝麻 | 园豆:4 (初学一级) | 2015-06-10 15:35

就是说Flush似乎也不是像函数执行完毕那样立刻返回数据的。

大芝麻 | 园豆:4 (初学一级) | 2015-06-10 15:36

@大芝麻: Response.Flush(true)

Launcher | 园豆:45045 (高人七级) | 2015-06-10 15:39

@Launcher: 大侠好像在MVC中 Flush没有true参数的重载

大芝麻 | 园豆:4 (初学一级) | 2015-06-10 16:03

@大芝麻: 

Response.Output.Flush()

Response.OutputStream.Flush()

Response.End()

Response.Close()

Launcher | 园豆:45045 (高人七级) | 2015-06-10 16:25

@Launcher: 这样试了OK啦,谢谢大侠细心指导。膜拜!

大芝麻 | 园豆:4 (初学一级) | 2015-06-10 16:28

@Launcher: 对了大侠,这个response.close只是影响一个客户的连接是吧,不会在其他客户的连接还没处理完的时候关闭其他连接吧?

大芝麻 | 园豆:4 (初学一级) | 2015-06-10 16:38

@大芝麻: 不会。

Launcher | 园豆:45045 (高人七级) | 2015-06-10 16:43
其他回答(3)
0

两个办法: 1 Response.Write(msg.Handler());后面别写别的代码了,如果后面有实际意义的代码,可以分方法执行

               2 把方法void换成ActionResult,  然后Response.Write(msg.Handler())换成 return this.Json(msg.Handler());

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-06-10 15:25
0

试一下Response.End()这个方法。

ps,感觉用了MVC再用Response对象有点不伦不类。

JeffWong | 园豆:2328 (老鸟四级) | 2015-06-10 15:51
0

要不开个另外的线程去做不需要返回数据的事情。

chenping2008 | 园豆:9836 (大侠五级) | 2015-06-10 15:53

MVC每个控制器过程本来就用来工作线程池,把这个再放入线程池首先有加锁的问题,其次同样需要从池中占用一个线程来处理。所以还不如就在这个线程中执行了。

支持(0) 反对(0) 大芝麻 | 园豆:4 (初学一级) | 2015-06-10 15:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册