2010-03-23 109 views
3

我在WCF中使用NetTcpBinding,我想發送不超過1 MB大小的流。我已經將MaxReceivedMessageSize設置爲一個非常高的數字,並且當然可以正常工作。找出WCF中所需的MaxReceivedMessageSize與NetTcpBinding

但我很好奇:

是否MaxReceivedMessageSize設置爲一個非常HIGHT數量的任何(負面)影響,或將它設置它只是大小其實我是想送上面有用/接收?

使用NetTcpBinding傳輸流時,我可以期待什麼樣的開銷?含義:當我發送一個1 MB的數據流時,MaxReceivedMessageSize的大小是多少?

回答

2

設置MaxReceivedMessageSize允許您調整您的端點以拒絕過大的消息。當端點暴露給公衆時,這可能是特別感興趣的,正如我們所知,公衆對愚蠢和惡意用戶的公平分享。

通常,如果您知道最大郵件大小,則應該使用該郵件大小。

有些人可能會有所不同,但在我看來,1Mb = 1048576字節(1024 * 1024)。我還會添加緩衝區來處理諸如消息信封之類的雜事。因此,1048576 + 1024 = 對於預期1Mb的消息看起來是合理的大小。

+1

你從哪裏得到「+ 1024的郵件信封」號?或者這只是一個假設? – flayn 2010-03-24 12:42:39

+1

@Flo - 只是猜測,開銷會因情況而異。如果您擔心,您可以攔截請求並進行測量。爲了安全起見,添加8 * 1024的開銷。 ;-) – 2010-03-24 13:08:15

+0

感謝您的幫助。 – flayn 2010-03-25 09:45:07

3

如果要將大小爲1 MB的文件發送到服務器,則服務器上的maxReceivedMessageSize必須至少爲1 MB(無論您計算的是100萬字節,還是10的20次冪= 1 「048'576)。

WCF默認保持這些值真的很低的原因是爲了防止服務器遭受拒絕服務攻擊。如果您的服務器上最多允許使用1 MB或2 MB的maxReceivedMessageSize,攻擊者可能會嘗試使用一串請求大小超過該大小的請求來氾濫您的服務器,從而最終導致服務器耗盡內存。

WCF有一些安全措施,例如限制最大併發連接數等,這些都在這種情況下發揮作用。因此,如果你安全地位於企業防火牆之後,那麼這個限制就是打開穀倉門,這對壞人來說只是一點點 - 真的,這可能不是問題。如果您的服務器處於互聯網的寒風中,這可能會導致您運行的風險。

+0

2來20的冪 – 2013-04-18 15:03:37