我目前有一个启用了流的 WCF 服务,这大大减少了客户端应用程序的内存使用量,但我希望能够在客户端反序列化流中的对象时读取它们并填充 DataTable 而不是等待对于要接收的所有对象,因为获取所有数据仍然需要很长时间。
我读过这篇文章,它似乎与我的目标相关,但它似乎已经过时了。我想知道是否有更现代的方法使用 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:
即使不传递任何参数,我也能够从服务中获取结果。我猜测正在使用默认值,因为它们是基元和/或可为空值。但是,我仍然希望能够使用不同的参数值调用服务,但我无法这样做。
那篇文章背后的想法仍然有效。为什么说它已经过时了呢?流式传输 WCF 消息主要涉及处理 WCF 消息本身,并且此处描述的技术应该可行。你有什么问题吗?