我目前有一个启用了流的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。但是,我仍然希望能够使用不同的参数值调用服务,但我无法这样做。
答案 0 :(得分:0)
该文章背后的想法仍然有效。为什么你说它已经过时了?流式传输WCF消息主要涉及处理WCF消息本身,并且其中描述的技术应该有效。你有任何问题吗?