今天寫了個WCF介面,然後自測通過,和別人聯調時報 遠程伺服器返回錯誤: (413) Request Entity Too Large 錯誤!記得以前寫的時候也出現過這個錯誤,大致解決辦法是設置伺服器端的接收最大消息的限制改大點。但具體的配置節點及參數有點忘記了,網上搜了些資料改正並經過自測驗證後通 ...
今天寫了個WCF介面,然後自測通過,和別人聯調時報 遠程伺服器返回錯誤: (413) Request Entity Too Large 錯誤!記得以前寫的時候也出現過這個錯誤,大致解決辦法是設置伺服器端的接收最大消息的限制改大點。但具體的配置節點及參數有點忘記了,網上搜了些資料改正並經過自測驗證後通過,主要的配置如下:
服務端返回數據量過大的錯誤時,就去修改服務端的配置:
在bindings節點添加一個binding配置,主要是指定最大的接收數據,主要是maxReceivedMessageSize屬性的值:
<binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647" messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00" />
然後給相應的Service指定bindingConfiguration屬性,指向之前的這個binding配置,註意,因為是服務端的配置,所以是在services節點中加配置,contract這個節點是你的服務契約名:
<services> <service name="Huazhu.Certificate.WCFService.SyncDataService"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeDataTransferServicesBinding" name="XXX" contract="Huazhu.Certificate.WCFService.ISyncDataService" /> </service> </services>
配置好後去測試,然後報了另外一個錯誤,大致如下:
格式化程式嘗試對消息反序列化時引發異常: 對操作“PushMasterData”的請求消息正文進行反序列化時出現錯誤。讀取 XML 數據時,超出最大字元串內容長度配額 (8192)。通過更改在創建 XML 讀取器時所使用的 XmlDictionaryReaderQuotas 對象的 MaxStringContentLength 屬性,可增加此配額。 行 1,位置 2177
好,現在應該是數據能接收到了,看字面上意思應該是要設置個MaxStringContentLength什麼屬性的值,貌似預設的讀取長度不夠,然後在經過修改binding節點的配置如下:
<binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647" messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00" > <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> </binding>
經過測試調用成功,但想想如果提供的WCF介面非常多,每個Service都得配置,這樣就太多的重覆了。有沒有更簡單的呢?直接上如下代碼說明,只需要配置一個沒有name屬性的binding節點就可以,連前面的Service都可以不用配置了,我的理解是沒有配置name屬性,就相當於是預設的binding,除非單獨制定了配置,不然都會走這個預設的綁定。
<binding closeTimeout="00:10:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>
這個配置同樣適用於WCF的客戶端配置,也是只需要一個binding即可搞定,本文中的節點的其他一些屬性若有不理解,請自行去網上搜,資料很多。