流式传输WCF数据服务响应
本文关键字:服务 响应 数据 WCF 传输 | 更新日期: 2023-09-27 18:06:57
我正在尝试流式传输我的wcf数据服务的响应,以使等待时间更用户友好。响应是XML格式的(我使用实体框架4.1)我有这些预定义的事件
service.SendingRequest += service_SendingRequest;
service.ReadingEntity += service_ReadingEntity;
service.WritingEntity += service_WritingEntity;
之后我调用DataServiceQuery执行方法
var items = myItems.Query.Execute();
这是SendingRequest事件的主体
var response = (HttpWebResponse)e.Request.GetResponse();
var resStream = response.GetResponseStream();
var sb = new StringBuilder();
var buf = new byte[1024];
string tempString;
int count;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tempString);
}
}
while (count > 0);
所以问题是在那之后什么都没有发生。下一个事件ReadingEntity没有触发。如何解决这个问题?
你不能改变service发送请求的方式。事件允许您修改请求标头,但服务必须自己调用它。你的代码很可能破坏了服务的功能。我也不认为你想做的是可能的。WCF数据服务仍然在内部使用WCF,除非它使用流,否则它将始终等待整个消息,然后将其传递给上层(上下文)。WCF数据服务中的流只有在实现流提供商时才有可能实现,并且它主要用于下载二进制数据,而不是下载块中的公共数据。
你正在尝试做的将需要分块响应(在WCF流中使用)。使用默认的WCF功能集处理分块响应是不受控制的。