我调用了一个返回大量数据的SOAP WCF服务。不仅仅是调用Windows Mobile设备可以处理。
但我注意到一些奇怪的事情。当我拨打电话时,它看起来像这样:
MyContract[] myContractArray = MyService.CallToGetLotsOfDataObjects();
这不会失败。但是当它遍历myContractArray
并将它们放入客户端类时,它就会失败。
起初我只是说,“好吧,它无法处理两份数据,这太多了”。但现在我想知道myContractArray
实际上是否在上述调用之后持有数据。我想知道它是否有点像Linq-To-SQL调用,在需要之前它不会被加载。
所以这是我的问题,以下几点是在客户端分配数据?
// Create the service
var serviceLib = new MyServiceDataServiceLib();
// 1 -----------------+
// |
// V
MyContract[] myContractArray = serviceLib.WCFCallToGetLotsOfDataObjects();
List<MyClass> myClassList = new List<MyClass>()
// 3 -----------------+ +------------------ 2
// | |
// V v
foreach(MyContract myContractInstance in myContractArray )
{
MyClass myClassInstance = new MyClass();
myClassInstance.BigImage = myContractInstance.BigImage;
myClassInstance.MoreData = myContractInstance.MoreData;
myClassInstance.EvenMoreData = myContractInstance.EvenMoreData;
myClassList.Add(myClassInstance);
}
是否在:
我认为它是1或3,但我不确定它是什么。有谁知道吗?
(注意:我使用的是Visual Studio 2008和.net 3.5。我的客户端是Windows Mobile应用程序)
答案 0 :(得分:1)
数组的分配在1处理。代理与任何其他.NET对象一样。该数组不以任何方式“透明”,也不稀疏。
基本上,当数据从服务返回时,如果它被输入为数组,则数组以及数组中的任何元素都将完全序列化/具体化。
答案 1 :(得分:0)
我的猜测是数据是在第一个myContractInstance.BigImage中分配的。这是因为MyContract是代理,但我不确定。
你可以通过评论foreach的内容并看看你是否仍然得到例外来测试这个。