2014-02-07 48 views
2

我在WCF服務中接收發布數據時遇到問題。如果我嘗試使用InputStream,我會得到一個異常。 「調用HttpRequest.GetBufferlessInputStream後,此方法或屬性不受支持」我應該如何使用HttpRequest.GetBufferlessInputStream?

我相信我理解爲什麼會引發此錯誤,但我尚未成功解決此問題。有一個關於這個問題的現有帖子指出了幾個解決方法 - Visual Studio 2012 install broke my 2010 WCF project

我使用的是.Net 4.5,所以我遵循了在帖子中提出的解決方案,但無濟於事。嘗試訪問InputStream時,我仍然遇到錯誤。

如果我知道如何正確處理無緩衝輸入流,那對我來說並不是真正的問題。當我查看流的長度時,它似乎包含我發送的數據,但是當我使用StreamReader讀取它時,它始終不返回任何內容。如果我只是調用Stream.Read(),它總是顯示爲空。

我的理解是,出於可擴展性的原因,緩衝輸入被替換爲無緩衝輸入,但它似乎有些不直觀。有誰知道如何正確處理無緩衝輸入?你能提供一個例子嗎?

我已嘗試這兩個:

var result = string.Empty; 
Stream stream = context.Request.GetBufferlessInputStream(); 
      byte[] b = new byte[100000]; 
      while ((n = stream.Read(b, 0, b.Length)) > 0) 
      { 
       result += n; 
      } 

var stream = context.Request.GetBufferlessInputStream(); 
var streamContent = new StreamReader(stream).ReadToEnd() 

回答

2

您可以創建一個HttpModule(見http://blogs.msdn.com/b/praburaj/archive/2012/09/13/accessing-httpcontext-current-request-inputstream-property-in-aspnetcompatibility-mode-throws-exception-this-method-or-property-is-not-supported-after-httprequest-getbufferlessinputstream-has-been-invoked.aspx),或者如果您使用的是.NET 4.5.1添加一個簡單的配置參數:

<configuration> 
    <appSettings> 
    <add key="wcf:serviceHostingEnvironment:useClassicReadEntityBodyMode" value="true" /> 
    </appSettings> 
</configuration>