我有一个应用程序需要在客户端Web浏览器和托管WCF服务的服务器之间来回发送大型数据结构。数据结构基本上是一棵树,其中树中的节点以其序列化形式,每个节点大约为一千字节,并且在呼叫中可以有多达几百个这样的节点。
该应用程序是遗留的,并使用JSONP编写,以支持跨域支持。考虑到项目的进度限制,我无法替换JSONP。
理想情况下,我会在HTTP请求正文中传递序列化数据,但是当我谷歌搜索intertubes时,我知道JSONP请求只是HTTP GET - 所以没有请求体。这也意味着我遇到了HTTP GET的限制:查询字符串不能可靠地长于8千字节左右。
我的目的是避免在WCF服务上保存状态,通过让客户端将修改后的树发送到服务器,然后服务器验证树,在需要时执行相关的树操作,然后将修改后的树发送回响应中的客户端更新UI。如果被往返的数据大约为100千字节,这是否可行?
答案 0 :(得分:1)
解决JSONP大小限制(HTTP GET url / querystring限制)的唯一方法是将大型请求分解为多个较小的请求,但要做到这一点,您需要'某种状态(会话,临时缓存)服务器端。
CLIENT /jsonp?part=1&of=3&callback=foobar&datachunk=...
SERVER foobar("part 1 received");
CLIENT /jsonp?part=3&of=3&callback=foobar&datachunk=...
SERVER foobar("part 3 received");
CLIENT /jsonp?part=2&of=3&callback=foobar&datachunk=...
SERVER foobar("all parts received heres the result");
编辑如果您只想发送2个请求,这是另一种可能性。在客户端上使用AJAX将大数据发布到服务器。服务器将缓存数据并将令牌(GUID)返回给客户端。然后,客户端将使用令牌创建JSONP请求。