0

我想流我的wcf数据服务的响应,使等待时间更友好。响应是XML格式(我使用实体框架4.1) 我有这些预定义的事件流WCF数据服务响应

service.SendingRequest += service_SendingRequest; 
service.ReadingEntity += service_ReadingEntity; 
service.WritingEntity += service_WritingEntity; 

后,我打电话化DataServiceQuery Execute方法

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没有开火。 我该如何解决这个问题?

+0

是您定义的那些事件吗?你是否凌驾于功能上?你通过这个代码?所有的数据是否都正确地通过了?需要更多细节。 –

回答

1

您无法改变服务如何发送请求的方式。事件在那里允许您修改请求标头,但服务必须自己调用它。您的代码很可能破坏了该服务的功能。另外我不认为你正在努力做什么是可能的。 WCF数据服务在内部仍然使用WCF,除非它使用流式传输,它将始终在传递给上层(上下文)之前等待整个消息。只有在执行streaming provider时才可以在WCF数据服务中进行流式传输,并且主要用于下载二进制数据,而不是以块形式下载公共数据。

你要做什么需要分块响应(用于WCF流)。默认的WCF功能集与分块响应一起工作不在您的控制范围之内。