问题描述
大家好!遇到一个很麻烦的问题,我的应用是一个WebApplication,客户端会向我的某个网页POST一段很长的数据,因为很长,他会使用chunked编码,(chunked编码即一段一段发,每一段都有头,表示长度,具体不明白,可参考google)我需要非常及时的处理发来的数据,即他发来一段数据,我就处理一段,而目前asp.net封装办法,似乎是等所有数据发送完成,他把一段一段的数据拼成一个流。然后再返回给我,比如,我在Page_Load里用Request.InputStream是没办法立即得到数据的,调用将会一直等待,直到客户端全部发完才能使用Request.InputStream流。这不满足我的要求,似乎也违被了chunked编码的初衷。其实只要asp.net网页允许我直接接收裸的Http请求即可,我会自己给chunked数据解码拼装。我想了很多办法,就是没办法获得收裸的Http请求,包括使用HttpModule方式,都不行。有经验的大哥,分享一下怎么样解决此问题?另,Java应当是可以访问到的,因为我曾经POST过数据给Java写的网页,也是chunked发送的,他能立即收到,并分段处理。有点长,无论如何,感谢看完。
解决方案
解决方案二:
设置requst的编码格式。
解决方案三:
我现在是接收端,不是发送端,没法设置requst的编码格式,顶一下。
解决方案四:
你要自己处理那些份段??asp.net的话chunked是iis替你处理的!如果是gzip压缩也会给自动解压了要直接在80上取数据包好像不行!那要用VC写isapi!如果要纯裸的可以自己用Socket写或参考.net2.0里那个WebDev.WebServer.EXE的代码写个小型的iis
解决方案五:
FlashElf兄:你说用socket自己写当然没有什么问题,处理这么个事也不会太麻烦,关键是如果这样的话,那我的程序部署起来就太麻烦了。我还是希望尽可能使用asp.net的网页来解决。另:我知道chunked和gzip压缩的数据,是asp.net封装起来,处理过了。可是我想,作为asp.net的设计者,他应当留下接口,让我们有办法直接获取裸的HTTP数据的,因为chunked的本意就是一段一段发送,一段一段除了可以传大文件,也是为了可以即时处理数据。如果不留下接口,那我们就没办法使用chunked带来的好处了。那asp.net这部分的设计应当是相当失败的。请问您能确定asp.net里真的没有办法直接获取吗?我隐隐觉得应当是有的,可是找不到资料,网上的资料好少。另,我写了个httpModule,在BeginRequest里也取不到原始HTTP请求数据,还是解码过的(解码过的就意味着不及时,数据都发完了才可以访问)
解决方案六:
建议看看asp.net下的httpModule技术
解决方案七:
顶一下,HttpModule也没找到相关的资料,可以获取裸的HTTP请求信息。
解决方案八:
请在MSDN内查阅HttpWorkerRequest类。基本上所有能够做到显示上传进度的组件,都是用HttpWorkerRequest的,既然上传进度能够计算得出,那就表明HttpWorkerRequest确实能够在上传过程中进行处理。详细的做法,建议你看看显示上传进度的组件是怎么做的。
解决方案九:
http://msdn2.microsoft.com/zh-cn/library/system.web.ihttpmodule.aspx