我現在有已流式啓用極大地降低了客戶端應用程序的內存使用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。但是,我仍然希望能夠使用不同的參數值調用服務,但我無法這樣做。
我沒有嘗試過該文章中的方法,但因爲我想避免更改服務,所以我想真正的問題,我可以做客戶端上的東西嗎?我之所以說這是過時的原因是因爲它是從2008年開始的,並且WCF 4.0中有一些新功能,所以我認爲可能會讓這樣做更容易。 – alimbada 2012-01-18 14:29:06