我有这个合同和实施的WCF服务:
[OperationContract]
IEnumerable<string> GetData(int value);
public IEnumerable<string> GetData(int value)
{
int i = 0;
while (i++ < value)
{
Console.WriteLine($"returning {i}th item");
yield return $" Item:{i}";
}
}
}
当客户调用GetData时,yield似乎不起作用。所有项目一次返回,而不是一个接一个。
答案 0 :(得分:3)
事实上。因为数据是序列化以通过线路,所以串行器调用该方法,实现结果并将其写入字节流以通过网络发送。
如果您将该类放在与客户端相同的程序集中并直接调用它而不是通过服务管道调用它,那么它将起作用。
对于不通过序列化连接工作很有意义,其中一个就是你的另一个端点甚至可能根本不是.NET而且可能不知道IEnumerable<T>
是一个特殊的雪花执行顺序。