在反序列化对象时从WCF流中读取?

时间:2012-01-18 12:30:20

标签: wcf datatable streaming paging

我目前有一个启用了流的WCF服务,它大大减少了客户端应用程序的内存使用量,但我希望能够在客户端反序列化时读取流中的对象并填充DataTable而不是等待接收所有对象,因为它仍然需要很长时间才能获得所有数据。

我阅读了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。但是,我仍然希望能够使用不同的参数值调用服务,但我无法这样做。

1 个答案:

答案 0 :(得分:0)

该文章背后的想法仍然有效。为什么你说它已经过时了?流式传输WCF消息主要涉及处理WCF消息本身,并且其中描述的技术应该有效。你有任何问题吗?