函数过程如下
[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 求大侠指导
Response.Flush();
你好,这个方法我试过,但是有个问题,似乎Flush之后依然没有立刻返回数据。我把返回数据之后的耗时操作延时为10秒,结果Flush之后要过大概5-6秒时间才返回数据。很奇怪。
就是说Flush似乎也不是像函数执行完毕那样立刻返回数据的。
@大芝麻: Response.Flush(true)
@Launcher: 大侠好像在MVC中 Flush没有true参数的重载
@大芝麻:
Response.Output.Flush()
Response.OutputStream.Flush()
Response.End()
Response.Close()
@Launcher: 这样试了OK啦,谢谢大侠细心指导。膜拜!
@Launcher: 对了大侠,这个response.close只是影响一个客户的连接是吧,不会在其他客户的连接还没处理完的时候关闭其他连接吧?
@大芝麻: 不会。
两个办法: 1 Response.Write(msg.Handler());后面别写别的代码了,如果后面有实际意义的代码,可以分方法执行
2 把方法void换成ActionResult, 然后Response.Write(msg.Handler())换成 return this.Json(msg.Handler());
试一下Response.End()这个方法。
ps,感觉用了MVC再用Response对象有点不伦不类。
要不开个另外的线程去做不需要返回数据的事情。
MVC每个控制器过程本来就用来工作线程池,把这个再放入线程池首先有加锁的问题,其次同样需要从池中占用一个线程来处理。所以还不如就在这个线程中执行了。