2012-01-18 18 views
1

我現在有已流式啓用極大地降低了客戶端應用程序的內存使用WCF服務,但我希望能夠讀取流中的對象,因爲它們是在客戶端上反序列化和填充數據表,而不是等待所有的對象被接收,因爲它需要很長時間才能獲得所有的數據。因爲對象被反序列化而從WCF流中讀取數據?

我不得不通過this article這似乎是有關我的目標一讀,但它似乎相當過時。我想知道是否有更現代的方式來實現這個使用WCF 4.0。

更新:

所以我實現了操作在我的服務中使用上面鏈接的文章中介紹的方法,但是我在運行時整個這個異常傳來:

「的操作GetMyDtos」無法加載,因爲它具有System.ServiceModel.Channels.Message類型的參數或返回類型或具有MessageContractAttribute和其他不同類型參數的類型。當使用System.ServiceModel.Channels.Message或具有MessageContractAttribute的類型時,該方法不得使用任何其他類型的參數。

我的操作有以下特徵:

Message GetMyDtos(bool param1, int? param2, bool param3); 

所以我改成了這樣:

Message GetMyDtos(GetMyDtosParameters getMyDtosParameters); 

和GetMyDtosParameters看起來是這樣的:

[MessageContract] 
public class GetMyDtosParameters 
{ 
    [MessageHeader] 
    public bool Param1 { get; set; } 
    [MessageHeader] 
    public int? Param2 { get; set; } 
    [MessageHeader] 
    public bool Param3 { get; set; } 
} 

一切都工作正常現在在服務端,但我有一個在向客戶端添加或更新服務引用時出現問題。方法GetMyDtos在沒有任何方法參數(也沒有重載)的客戶端中生成,所以我無法將任何參數傳遞給服務操作。

更新2:

我能拿回從服務的結果,即使沒有傳遞任何參數我猜正在使用默認值,因爲它們是原語和/或Nullables。但是,我仍然希望能夠使用不同的參數值調用服務,但我無法這樣做。

回答

0

這篇文章背後的想法仍然有效。你爲什麼說它已經過時了?流式傳輸WCF消息主要涉及自己處理WCF消息,並且在那裏描述的技術應該可以工作。你有什麼問題嗎?

+0

我沒有嘗試過該文章中的方法,但因爲我想避免更改服務,所以我想真正的問題,我可以做客戶端上的東西嗎?我之所以說這是過時的原因是因爲它是從2008年開始的,並且WCF 4.0中有一些新功能,所以我認爲可能會讓這樣做更容易。 – alimbada 2012-01-18 14:29:06

相關問題