我应该实现OData服务,它将能够以流方式生成feed ie - 当服务仍然生成下一个条目时,客户端应该开始读取提要的第一个条目。
WCF数据服务是否可以实现此类行为?
现在我无法做到这样的行为 - 服务首先在缓冲区中生成整个Feed,然后才启动 将它转移到客户端但这种行为不适合我,因为它太大而无法在缓冲区中生成 它不包含很多行的BLOB属性,因此IDataServiceMetadataProvider的实现将无济于事。
答案 0 :(得分:0)
我认为这是不可能的。 WCF服务(以及WCF数据服务)提供流,但流支持不基于通信两端的并发写入和读取。例如,如果您在磁盘上有文件并将其流传递到WCF通道进行发送,则流式传输效果很好。
问题在于如何构建WCF。您不会在服务操作中获得传输流,这是问题的全部来源。您必须启动一些新流或打开另一个现有流,并且只有在从操作返回此流后,它才会传递到底层WCF基础结构并复制到传输流。但这意味着在从服务操作返回之前必须准备流(包含所有数据)。
我尝试构建服务,在从操作返回后从另一个线程连续填充流,但它根本不起作用。
答案 1 :(得分:0)
我只能通过允许WCF流来解决这个问题 - 指定transferMode =“Streamed”:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service name="ODataDemo.OdataDemoDataService">
<endpoint bindingConfiguration="msgSize" address="" binding="webHttpBinding" contract="System.Data.Services.IRequestHandler" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="msgSize" transferMode="Streamed" />
</webHttpBinding>
</bindings>
</system.serviceModel>