2012-04-10 101 views
0

我有一個帶有WCF服務的ASP.NET MVC3解決方案。當我從此WCF服務獲取公司列表(超過2200條記錄)時,我收到錯誤:傳入消息的最大消息大小配額已超出傳入郵件的最大郵件大小限額已超出>>設置爲900000

原因是在Web.Config文件中的:maxBufferPoolSize和maxReceivedMessageSize是65536.我改爲900000,現在我沒有任何問題。

我的問題:maxBufferPoolSize和maxReceivedMessageSize的值是900000(900k)還是合理嗎?我真的需要我所有的記錄來分頁數據。

子問題:直接在WCF服務中「分頁」,並僅返回所需的數據頁面是否更有效?這值得嗎?

感謝您的幫助。

+0

你當然可以實現對WCF側分頁。我認爲這是你有權訪問的代碼? – Maess 2012-04-10 17:35:58

+2

我認爲這篇文章與你很相關:http://www.codinghorror.com/blog/2012/03/the-end-of-pagination.html。 你真的需要顯示2200條記錄嗎?在調用服務之前,如果允許進行一些過濾,對用戶來說會不會更好? – mafue 2012-04-10 17:40:29

+0

@Maess:是的,我可以訪問WCF服務的源代碼。 – Bronzato 2012-04-10 17:48:59

回答

1

900k郵件大小並非不合理。我會建議運行一些檢查,以確保它爲您提供擴展空間,例如。當你有4000條記錄時它仍然適合嗎?我已經看到2MB的其他建議作爲限制,所以你完全在這個範圍內。

的替代,根據您的意見,將提供兩個方法:

GetAllRecords() 
returns all 

GetSomeRecords(int limit) 
returns a subset, plus a count of the total available. 

您的客戶端應用程序可以選擇調用哪個方法,根據用戶的喜好。如果用戶想要查看頁面,請在客戶端應用程序中調用GetAllRecords和分頁。

1

MaxReceivedMessageSize應保持較小以避免DoS攻擊。如果您的服務在Intranet方案中,則應該可以大於默認值。如果它位於公共Intranet上,則需要權衡攻擊的影響與需要分頁的可用性影響。

maxbufferPool大小更難回答,因爲它取決於您期望的併發請求數量。嘗試一下本作的解釋

http://social.msdn.microsoft.com/Forums/en/wcf/thread/d6e234d3-942f-4e9d-8470-32618d3f3212/

+1

+1這是個好建議。如果你能減少你的消息大小,那麼你應該。爲了解釋愛因斯坦,它應該儘可能小,但不能小一些。 – mafue 2012-04-10 20:12:38

+0

引用愛因斯坦+1:o) – 2012-04-10 20:14:39

相關問題