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功能集與分塊響應一起工作不在您的控制範圍之內。