2009-02-26 52 views
1

我正在研究將數據傳遞到自定義客戶端應用程序的Web應用程序。WCF服務如何返回大量數據?

當數據超過某些「小」大小時,我收到異常。由於最終用戶可能會使用越來越大的數據大小,因此我將WCF函數的返回值切換爲數據集的ID。

接下來,我轉換客戶端使用ID從一些簡單的ASPX頁面檢索數據。這工作正常,但意味着接口不一致。

  1. 編輯:我不知道我是如何錯過了返回一個Stream,但我做到了。有沒有人有WCF上的Streams問題?

  2. 除了連接斷開之外,從ASPX頁面通過HTTP流讀取文件是否存在問題?

我會假設我缺少WCF的能力(如oob數據)。但是,隨後,C#/ .NET在線幫助或者很差,或者在我的機器上安裝時嚴重損壞。

謝謝。

[編輯]順便說一句,在我的情況下,「大量的數據」是用戶輸入驅動,但將至少需要20MiB。

回答

0

據我瞭解@Eugene提到的Large Data and Streaming文章, 必須爲所有通信切換傳輸模式,這意味着它關閉了一些完整性檢查。

因此,我結束了使用,其中一個半定製的HTTP客戶端類:

  • 下載使用ASPX頁面(或多個)返回的數據,並將其流式傳輸到 客戶端應用程序的磁盤文件,
  • 上傳將文件發送到生成GUID的ASPX頁面,並將該文件作爲其名稱的一部分以該GUID的形式保存到服務器磁盤。然後它 調用WCF方法來傳遞其他參數與GUID代替 文件數據。

這不是美麗的,但它的工作原理。不幸的是,IIS或客戶端應用程序崩潰可能會將臨時文件保留在服務器硬盤驅動器上,但它們已經本地化,並且可能會在創建服務時清除這些臨時文件 。

0

你看到的例外是什麼?您是否因爲超出讀者配額而無法讀取XML?

如果是這樣,我想我知道什麼可以解決它。請參閱下面的示例wsHttpBinding。您的例外應該可以幫助您確定哪些參數需要修復。您可以爲讀者提供maxReceivedMessageSize和配額。讓我知道如果這不起作用,請提供更多數據。

<wsHttpBinding> 
    <binding name="bindingName" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"> 
     <readerQuotas maxDepth="32" maxStringContentLength="3145728" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    </binding> 
</wsHttpBinding> 
+0

它是從消息大小溢出超時異常(忘了細節)。無論如何,將這些數據作爲字符串(或甚至字節[])返回似乎並不合理,我想弄清楚其他人如何通過WCF返回「LARGE」數據值。 – NVRAM 2009-03-10 20:12:31

+0

謝謝,您的評論可能會解決我假設的核心問題(客戶端/服務器上的消息大小不匹配),但我暫時沒有達到這個目的。 – NVRAM 2009-03-10 20:13:20