2017-05-29 453 views
0

我試圖建立遠程服務的響應。在我的web.config中使用以下部分,我收到了來自Web服務的不良響應。C#/ ASP.NET - 遠程服務器返回意外響應:(413)請求實體太大

遠程服務器返回了意外的響應:(413)請求實體太大。我試圖增加緩衝區大小,但無法通過這個錯誤。

我該如何解決這個問題?

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="CustomBinding_ISalesOrderService" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text"> 
      <security mode="Transport"/> 
      <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://app.vendsys2.com/VendSysAPI/v1.2/SalesOrderService.svc/VendSysAPI/v1.2/SalesReportService.svc" 
     binding="basicHttpBinding" bindingConfiguration="CustomBinding_ISalesOrderService" 
     contract="SalesOrderService.ISalesOrderService" name="CustomBinding_ISalesOrderService" /> 
    </client> 
    </system.serviceModel> 
+0

你可以讀這個https://stackoverflow.com/questions/10122957/iis7-413-request-entity-too-large-uploadreadaheadsize 改變basicHttpBinding爲webHttpBinding可能會有所幫助。 – Miguel

回答

0

如果客戶端發送一個長的HTTP請求IIS工作進程可能會接收到足夠的數據來解析請求頭,但沒有收到整個請求實體正文。當IIS工作進程檢測到客戶端證書需要將數據返回給客戶端時,IIS會嘗試重新協商客戶端連接。但是,客戶端無法重新協商連接,因爲它正在等待將剩餘的請求數據發送到IIS [1]。你的問題可能就是這樣。

從微軟的TechNet兩者

如果要求重新協商客戶端,請求實體主體必須使用SSL預加載預加載。 SSL預加載將使用UploadReadAheadSize元數據庫屬性的值,該屬性用於ISAPI擴展。但是,如果UploadReadAheadSize小於內容長度,則會返回HTTP 413錯誤,並關閉連接以防止死鎖。 (發生死鎖是因爲客戶端正在等待完成發送請求實體,而服務器正在等待重新協商完成,但重新協商要求客戶端能夠發送數據,而不能這麼做)。


的解決方案是,以確保客戶端不從發送整個實體體阻斷。爲此,請將UploadReadAheadSize的值更改爲大於內容長度的值。

以下示例顯示如何在Web服務器上將UploadReadAheadSize的值設置爲200KB。

cscript adsutil.vbs set w3svc/1/uploadreadaheadsize 200 

注意的是,UploadReadAheadSize元件在IIS 7除去,並加入作爲屬性到serverRuntime元件。

相關問題