2011-07-04 105 views
3

我们正在构建Web服务并预计可能会有大量数据被返回。大型结果的Web服务

ASP.Net和IIS 6如何处理这个问题?我们可以做些什么来减少资源密集度?

例如,我们目前有一个可序列化的类,它的属性是另一个可序列化类类型的数组。当Web服务被调用时,它从数据库查询一大组记录,实例化类,填充数组属性,然后返回被序列化的类。

这是如何得到处理的引擎盖下?我想整个DataSet对象都存储在内存中,然后整个可序列化对象存储在成员中,然后序列化,整个XML存储在内存中,最后流向调用者。

我可以做些什么来减少内存消耗,例如从数据库读取结果时流出结果?这可能吗?

+0

在IIS上托管的旧式Web服务或WCF服务? –

+0

老式的Web服务。 – Jeremy

+0

@Jeremy:答案是,“不要使用旧式Web服务进行新的开发”。 –

回答

1

我不确定简单地交换使用WCF是答案,因为问题实际上是关于请求数据的负载。

有几件事情选择您喜欢的服务方法之前,要考虑偶数:

可以缓存的数据?如果可以将数据存储在内存中,则每次请求数据时都会阻止绘制数据。但是,如果数据的大小过大,则可以考虑将数据从数据库写入文件并从那里提供。

你可以考虑像Redis一样的虚拟机模式。这将允许您缓存数据,但如果不经常访问数据,则可以将数据写入文件以防止过度使用内存。

有什么办法,对数据库的调用可以分成几个更有效的调用?

如果执行通话所用的时间很长,您可以考虑异步调用数据。

最后,数据作为web服务提供服务至关重要吗?数据可以作为XML文档提供吗?

+0

WCF将解决这个问题,首先不会一次在内存中创建消息的四个副本;其次,如果可行,WCF服务可以使用TCP/IP和二进制代替HTTP和SOAP;第三,如果有必要,WCF可以做真正的流媒体。 –

+0

@John - 如果调用应用程序仅支持传统Web服务模型,WCF可以实现真正的流式传输吗? – Jeremy

+0

@John:我同意WCF是优越的,可能是合适的服务,但正如我所说的,在选择服务之前,应该考虑其他事情。 – Digbyswift