2011-09-10 78 views
1

我正在使用WCF實現一個大型文件流應用程序。在WCF應用程序中設置MaxReceivedMessageSize和MaxBufferSize的問題

我有一個問題,當我設置的配置MaxReceivedMessageSizeMAXBUFFERSIZE。當這些參數相同時系統工作正常。但是,當我選擇不同的值時,它會給出錯誤消息,

對於TransferMode.Buffered,MaxReceivedMessageSize和MaxBufferSize必須是相同的值。

但我在http://msdn.microsoft.com/en-us/library/ms733742.aspx與信息混淆如下,

例如,假設您的服務必須接收文件多達4 GB的大小 ,並將它們存儲在本地磁盤上。假設您的內存 受到限制,一次只能緩存64KB的數據,即 。然後,您將MaxReceivedMessageSize設置爲4 GB,將MaxBufferSize設置爲64 KB。另外,在您的服務實現中,必須確保您只讀取來自64-KB數據塊的傳入流,並且 在前一個數據塊寫入 磁盤之前不讀取下一個數據塊,並從內存中丟棄至4 GB和MaxBufferSize爲64 KB。 此外,在您的服務實現中,您必須確保僅從64 KB塊中的傳入流中讀取 ,並且在前一個塊已寫入磁盤並從內存中丟棄 之前不讀取下一個 塊。

有人可以解釋這件事的原因嗎?

回答

5

這是因爲TransferMode。如果要使用與消息大小不同的緩衝區大小,則應將其設置爲流式傳輸。

運輸支持在每個方向上轉移的消息的兩種模式:

  • 緩衝傳輸保持在存儲器中的緩衝器中的全部消息,直到傳輸完成。

  • 流傳輸只緩衝消息頭並將消息正文顯示爲流,從中可以一次讀取較小的部分。

相關問題