我有一個調用返回大量數據的SOAP WCF服務。不僅僅是呼叫的Windows Mobile設備可以處理。什麼時候分配了WCF呼叫的內存?
但我注意到一些奇怪的東西。當我打電話它看起來像這樣:
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應用程序。)
如何創建客戶端,是ChannelFactory還是ClientBase?你能發佈你的界面嗎(或者它看起來如何)?有沒有Linq?我的合同是DataContract嗎? – Aliostad 2010-10-19 15:31:27
@Aliostad - 服務的接口是由Visual Studio生成的一個大文件。發佈它會太大。我有Visual Studio生成的客戶端代碼,允許我調用該服務。我將在我的示例中添加一個示例。 – Vaccano 2010-10-19 15:32:51
我不需要整個界面。只有你打電話給你的人會導致問題。 – Aliostad 2010-10-19 15:56:32