2010-12-07 58 views
0

我試圖通過HTTP使用IIS將動態生成的數據流式傳輸到客戶端,並且連接必須長時間保持打開狀態,服務器在執行耗時的操作時會定期向客戶端發送狀態更新。如何強制IIS發送響應頭而不發送響應正文並關閉連接

這必須在一個請求中處理,但我使用的是一個WebClient.OpenRead()流,在發送標頭之前無法打開它。

如何強制IIS向客戶端發送標頭,然後發送響應正文?

回答

1

此行爲通常通過將KeepAlive設置爲true並將Expect標題設置爲「100並繼續」來實現。通過這樣做,服務器將發送結果代碼爲100的標頭。

我不確定這是否可以使用WebClient。


改爲使用HttpWebRequest來設置上面的值。實際上WebClient沒有什麼神奇的,但是使用GET來獲取數據。下面是在反射調用打開讀取代碼:

try 
    { 
     request = this.m_WebRequest = this.GetWebRequest(this.GetUri(address)); 
     Stream responseStream = (this.m_WebResponse = this.GetWebResponse(request)).GetResponseStream(); 
     if (Logging.On) 
     { 
      Logging.Exit(Logging.Web, this, "OpenRead", responseStream); 
     } 
     stream2 = responseStream; 
    } 
    catch (Exception exception) 
    { 
    // 
+0

那是不行的,因爲兩者保持活動和期待是頭,這是不被髮送,直到身體有任何的內容。由於程序的性質,在服務器上的整個操作完成之前,套接字連接無法以任何理由關閉,並且所有狀態更新都已發送到客戶端。我試圖找到一種方法發送正文之前發送標題。 – IDWMaster 2010-12-07 00:41:11