(413) ขอเอนทิตีใหญ่เกินไป | uploadReadAheadSize


140

ฉันได้เขียนบริการ WCF ด้วย. NET 4.0 ซึ่งโฮสต์บนระบบ Windows 7 x64Ultimate พร้อม IIS 7.5 หนึ่งในวิธีการบริการมี 'วัตถุ' เป็นอาร์กิวเมนต์และฉันกำลังพยายามส่งไบต์ [] ซึ่งมีรูปภาพ ตราบเท่าที่ขนาดไฟล์ของภาพนี้น้อยกว่าโดยประมาณ 48KB ทุกอย่างเป็นไปด้วยดี แต่ถ้าฉันพยายามอัปโหลดรูปภาพขนาดใหญ่บริการ WCF จะส่งคืนข้อผิดพลาดแน่นอน(413) Request Entity Too Large. ว่าฉันใช้เวลา 3 ชั่วโมงในการ Googling ข้อความแสดงข้อผิดพลาดและทุกหัวข้อที่ฉันเห็นเกี่ยวกับเรื่องนี้แนะนำให้เพิ่มคุณสมบัติ 'uploadReadAheadSize' สิ่งที่ฉันทำคือใช้คำสั่งต่อไปนี้ (10485760 = 10MB):

"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"

"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"

ฉันยังใช้ IIS Manager เพื่อตั้งค่าโดยเปิดไซต์และไปที่ "Configuration Editor" ภายใต้การจัดการ น่าเสียดายที่ฉันยังคงได้รับข้อผิดพลาด Request Entity Too Large และมันน่าหงุดหงิดจริงๆ!

มีใครทราบอีกไหมว่าฉันสามารถลองแก้ไขข้อผิดพลาดนี้ได้อีก?


6
10485760 = 10MB ไม่ใช่ 1MB
Shaun Rowan

คำตอบ:


211

นั่นไม่ใช่ปัญหาของ IIS แต่เป็นปัญหาของ WCF โดยค่าเริ่มต้น WCF จะ จำกัด ข้อความไว้ที่ 65KB เพื่อหลีกเลี่ยงการปฏิเสธการโจมตีบริการด้วยข้อความขนาดใหญ่ นอกจากนี้หากคุณไม่ใช้ MTOM มันจะส่งไบต์ [] ไปยังสตริงที่เข้ารหัส base64 (ขนาดเพิ่มขึ้น 33%) => 48KB * 1,33 = 64KB

ในการแก้ปัญหานี้คุณต้องกำหนดค่าบริการของคุณใหม่เพื่อยอมรับข้อความที่มีขนาดใหญ่ขึ้น ก่อนหน้านี้ปัญหานี้ทำให้เกิดข้อผิดพลาด 400 คำขอที่ไม่ถูกต้อง แต่ในเวอร์ชันที่ใหม่กว่า WCF เริ่มใช้ 413 ซึ่งเป็นรหัสสถานะที่ถูกต้องสำหรับข้อผิดพลาดประเภทนี้

คุณต้องตั้งค่าการmaxReceivedMessageSizeผูกของคุณ readerQuotasนอกจากนี้คุณยังสามารถต้องตั้ง

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding maxReceivedMessageSize="10485760">
        <readerQuotas ... />
      </binding>
    </basicHttpBinding>
  </bindings>  
</system.serviceModel>

9
ฉันได้ตั้งค่า maxRecivedMessageSize เป็นค่าข้างต้น แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน .. เอนทิตีคำขอมีขนาดใหญ่เกินไป ..
Sandepku

13
@ Sandepku- ในกรณี ... ฉันมีปัญหาเดียวกันนี้มานานแล้วและจากนั้นก็รู้ว่าฉันตั้งชื่อ Binding Name ผิดดังนั้น WCF จึงใช้ค่าเริ่มต้นแทนค่ากำหนดค่าของฉันและให้ค่าที่แน่นอนแก่ฉัน ข้อผิดพลาดเดียวกัน
Adrian Carr

1
ฉันได้ตั้งค่า maxRecivedMessageSize เป็นค่าด้านบน แต่ยังคงได้รับข้อผิดพลาดเดียวกัน .. เอนทิตีคำขอมีขนาดใหญ่เกินไป ชื่อผูกพันต้องไม่ว่างเปล่า ช่วยด้วย!
NetSide

2
ขอบคุณครับสิ่งนี้มีประโยชน์ทันที! การตั้งค่าใหม่สำหรับ maxReceivedMessageSize จำเป็นต้องตั้งค่าเดียวกันสำหรับ maxBufferSize
DiligentKarma

1
@Sandepku หากคุณใช้ webhttpbinding สำหรับ REST คุณอาจต้องสร้างชื่อการผูกใน <binding> เท่ากับการผูกคอนฟิกูเรชันใน <endpoint>
smoothumut

56

ฉันมีปัญหาเดียวกันกับ IIS 7.5 กับบริการ WCF REST พยายามอัปโหลดผ่าน POST ไฟล์ใด ๆ ที่สูงกว่า 65k และจะส่งคืนข้อผิดพลาด 413 "Request Entity too large"

สิ่งแรกที่คุณต้องเข้าใจคือประเภทของการผูกที่คุณกำหนดค่าไว้ใน web.config นี่คือบทความดีๆ ...

BasicHttpBinding กับ WsHttpBinding กับ WebHttpBinding

หากคุณมีบริการ REST คุณต้องกำหนดค่าเป็น "webHttpBinding" นี่คือการแก้ไข:

<system.serviceModel>

<bindings>
   <webHttpBinding>
    <binding 
      maxBufferPoolSize="2147483647" 
      maxReceivedMessageSize="2147483647" 
      maxBufferSize="2147483647" transferMode="Streamed">
    </binding>  
   </webHttpBinding>
</bindings>

2
ขอบคุณสิ่งนี้ใช้ได้ผลสำหรับฉันโดยใช้ IIS 7.5 กับบริการ WCF REST อันที่จริงฉันต้องแก้ไขแอตทริบิวต์ maxReceivedMessageSize เท่านั้น
Alex Yuly

ฉันมี maxReceivedMessageSize, maxBufferSize ทำเคล็ดลับ maxBufferPoolSize แสดงเป็นแอตทริบิวต์ที่ไม่ถูกต้อง
JabberwockyDecompiler

4
ตรวจสอบให้แน่ใจว่าคุณได้กำหนดชื่อการผูกและทำให้เท่ากับ bindingConfiguration บนปลายทาง เช่น <binding name = "restLargeBinding" maxBufferPoolSize = .......... > และในการกำหนดค่าบริการ <endpoint address = "" binding = "webHttpBinding" bindingConfiguration = "restLargeBinding" .......
smoothumut

2
ใช้งานได้ดีแม้ว่าการตั้งค่า transferMode = "Streamed" ทำให้ฉันได้รับคำขอที่ไม่ดี แต่ก็ต้องลบคำขอนั้นออก
WtFudgE

1
@smoothumut ฉันรู้ว่ามันเก่า แต่ bindingConfiguration = "restLargeBinding" ทำเคล็ดลับให้ฉัน! ฉันใช้บริการ wcf ที่โฮสต์เอง
ramires.cabral

27

ฉันมีปัญหาเดียวกันและการตั้งค่าการuploadReadAheadSizeแก้ไข:

http://www.iis.net/configreference/system.webserver/serverruntime

"ค่าต้องอยู่ระหว่าง 0 ถึง 2147483647"

สามารถตั้งค่าได้อย่างง่ายดายใน applicationHost.config-fle หากคุณไม่ต้องการทำ cmd-thing

ตั้งอยู่ในWindowsFOLDER\System32\inetsrv\config(เซิร์ฟเวอร์ 2008)

คุณต้องเปิดด้วย notepad ทำการสำรองข้อมูลของไฟล์ก่อน

ตามความคิดเห็นใน config วิธีที่แนะนำในการปลดล็อกส่วนคือการใช้แท็กตำแหน่ง:

<location path="Default Web Site" overrideMode="Allow">
    <system.webServer>
        <asp />
    </system.webServer>
</location>"

คุณสามารถเขียนที่ด้านล่าง (เนื่องจากไม่มีมาก่อน) ฉันเขียนmaxvalueที่นี่ - เขียนคุณค่าของคุณเองถ้าคุณต้องการ

<location path="THENAMEOFTHESITEYOUHAVE" overrideMode="Allow">
    <system.webServer>
        <asp />
        <serverRuntime uploadReadAheadSize="2147483647" />
    </system.webServer>
</location>

</configuration>ตัวอย่างเช่นหากคุณใส่ไว้ก่อนหน้านี้คุณจะรู้ว่าคุณมีอยู่ที่ไหน

หวังว่าจะช่วยแก้ปัญหาของคุณได้ มันเป็นปัญหาค่าใช้จ่าย SSL สำหรับฉันซึ่งการโพสต์มากเกินไปทำให้แอปพลิเคชันค้างทำให้เกิดข้อผิดพลาด(413) Request Entity Too Large


1
เมื่อตั้งค่าmaxReceivedMessageSizeเป็น int.MaxValue แล้วนี่เป็นเคล็ดลับ ฉันสงสัยว่ามีข้อกังวลหลัก ๆ เกี่ยวกับการตั้งค่าตัวเลือกนี้เป็น int.MaxValue ด้วยหรือไม่?
Langdon

2
จะมีใครรู้บ้างว่า uploadReadAheadSize เกี่ยวข้องกับบริการ WCF ที่โฮสต์เองโดยไม่ทำงานผ่าน IIS หรือไม่ นั่นเป็นปัญหาที่เกี่ยวข้องกับ Windows Server โดยทั่วไปหรือไม่
antscode

@antscode ฉันมี API ที่โฮสต์เองและประสบปัญหาเดียวกัน - คุณแก้ปัญหาด้วยบริการโฮสต์ด้วยตนเองหรือไม่?
Trevor Daniel

18

ฉันได้รับข้อความแสดงข้อผิดพลาดนี้แม้ว่าฉันจะมีการmaxตั้งค่าภายในการเชื่อมโยงของไฟล์กำหนดค่าบริการ WCF ของฉัน:

<basicHttpBinding>
        <binding name="NewBinding1"
                 receiveTimeout="01:00:00"
                 sendTimeout="01:00:00"
                 maxBufferSize="2000000000"
                 maxReceivedMessageSize="2000000000">

                 <readerQuotas maxDepth="2000000000"
                      maxStringContentLength="2000000000"
                      maxArrayLength="2000000000" 
                      maxBytesPerRead="2000000000" 
                      maxNameTableCharCount="2000000000" />
        </binding>
</basicHttpBinding>

ดูเหมือนว่าจะไม่มีการใช้การตั้งค่าการเชื่อมโยงเหล่านี้ดังนั้นข้อความแสดงข้อผิดพลาดต่อไปนี้:

IIS7 - (413) ขอเอนทิตีใหญ่เกินไปเมื่อเชื่อมต่อกับบริการ

.

ปัญหา

ฉันตระหนักว่าname=""แอตทริบิวต์ภายใน<service>แท็กของแท็กweb.configนั้นไม่ใช่ช่องข้อความอิสระอย่างที่ฉันคิด มันเป็นชื่อที่มีคุณสมบัติครบถ้วนของการดำเนินการตามสัญญาให้บริการตามที่กล่าวไว้ภายในหน้าเอกสารฉบับนี้

หากไม่ตรงกันการตั้งค่าการผูกจะไม่ถูกนำไปใช้!

<services>
  <!-- The namespace appears in the 'name' attribute -->
  <service name="Your.Namespace.ConcreteClassName">
    <endpoint address="http://localhost/YourService.svc"
      binding="basicHttpBinding" bindingConfiguration="NewBinding1"
      contract="Your.Namespace.IConcreteClassName" />
  </service>
</services>

ฉันหวังว่าจะช่วยให้ใครบางคนเจ็บปวด ...


1
ขอขอบคุณที่เพิ่มโซลูชันนี้! แก้ไขปัญหาของฉันทางอ้อมเนื่องจากชื่อสัญญาของฉันเปลี่ยนไปใน dev แต่การเปลี่ยนแปลงไม่ได้นำไปใช้กับการผลิตอย่างถูกต้อง การตรวจสอบการตั้งค่าเหล่านี้ช่วยแก้ไขข้อผิดพลาด (413) Request Entity Too Large เนื่องจากใช้การตั้งค่าขนาดข้อความเริ่มต้น
Doug Knudsen

ฉันดีใจจริงๆที่สิ่งนี้ช่วยใครสักคนได้ ฉันใช้เวลาดีๆกับเรื่องนี้ดังนั้นฉันหวังว่ามันจะทำให้วันของใครบางคนเจ็บปวดน้อยลง
ลุ

9

หากคุณพบปัญหานี้แม้ว่าจะลองวิธีแก้ปัญหาทั้งหมดในเธรดนี้แล้วและคุณกำลังเชื่อมต่อกับบริการผ่าน SSL (เช่น https) สิ่งนี้อาจช่วยได้:

http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top

เพื่อสรุป (ในกรณีที่ลิงก์เสียในอนาคต) หากคำขอของคุณมีขนาดใหญ่พอการเจรจาใบรับรองระหว่างไคลเอนต์และบริการจะล้มเหลวแบบสุ่ม เพื่อป้องกันไม่ให้สิ่งนี้เกิดขึ้นคุณจะต้องเปิดใช้งานการตั้งค่าบางอย่างในการเชื่อมโยง SSL ของคุณ จากเซิร์ฟเวอร์ IIS ของคุณนี่คือขั้นตอนที่คุณต้องดำเนินการ:

  1. ผ่านคำสั่งหรือ PowerShell netsh http show sslcertให้เรียกใช้ สิ่งนี้จะให้การกำหนดค่าปัจจุบันของคุณ คุณจะต้องบันทึกสิ่งนี้ไว้เพื่อใช้อ้างอิงอีกครั้งในภายหลัง
  2. คุณควรสังเกตว่า "Negotiate Client Certificate" ถูกปิดใช้งาน นี่คือการตั้งค่าปัญหา ขั้นตอนต่อไปนี้จะสาธิตวิธีการเปิดใช้งาน
  3. น่าเสียดายที่ไม่มีวิธีเปลี่ยนการเชื่อมโยงที่มีอยู่ คุณจะต้องลบและเพิ่มใหม่ รันnetsh http delete sslcert <ipaddress>:<port>อยู่ที่ไหน<ipaddress>:<port>IP: พอร์ตที่แสดงในการกำหนดค่าที่คุณบันทึกไว้ก่อนหน้านี้
  4. ตอนนี้คุณสามารถเพิ่มการผูกใหม่ได้ คุณสามารถดูพารามิเตอร์ที่ถูกต้องสำหรับnetsh http add sslcert ที่นี่ (MSDN)แต่ในกรณีส่วนใหญ่คำสั่งของคุณจะมีลักษณะดังนี้:

netsh http add sslcert ipport=<ipaddress>:<port> appid=<application ID from saved config including the {}> certhash=<certificate hash from saved config> certstorename=<certificate store name from saved config> clientcertnegotiation=enable

หากคุณมีการผูก SSL หลายรายการให้ทำซ้ำขั้นตอนสำหรับแต่ละการเชื่อมโยง หวังว่านี่จะช่วยประหยัดเวลาให้คนอื่นปวดหัวกับปัญหานี้ได้

แก้ไข: จากประสบการณ์ของฉันคุณไม่สามารถเรียกใช้netsh http add sslcertคำสั่งจากบรรทัดคำสั่งโดยตรงได้ คุณจะต้องป้อนพรอมต์ netsh ก่อนโดยพิมพ์netshจากนั้นออกคำสั่งของคุณเช่นhttp add sslcert ipport=...เพื่อให้มันทำงานได้


ขอบคุณสำหรับโพสต์ที่ช่วยแยกปัญหาให้เราการปิด SSL จะลบข้อผิดพลาด WCF น่าเสียดายที่การเจรจาต่อรองไคลเอ็นต์ไม่ได้เปลี่ยนผลลัพธ์ของเราให้ทำงานผ่าน SSL Stil กำลังมองหาบิตอื่น ๆ เพื่อสลับ :-(
Jafin

8

สิ่งนี้ช่วยฉันในการแก้ไขปัญหา (หนึ่งบรรทัด - แยกสำหรับความสามารถในการอ่าน / ความสามารถในการคัดลอก):

C:\Windows\System32\inetsrv\appcmd  set config "YOUR_WEBSITE_NAME" 
     -section:system.webServer/serverRuntime /uploadReadAheadSize:"2147483647" 
     /commit:apphost

คุณโฮสต์ WCF ของคุณในสภาพแวดล้อม SharePoint หรือไม่ และคุณต้องรีสตาร์ท IIS ของคุณหลังจากใช้การเปลี่ยนแปลงหรือไม่?
theITvideos

2

สำหรับฉันการตั้งค่าเป็นuploadReadAheadSizeint.MaxValue ยังช่วยแก้ปัญหาได้หลังจากเพิ่มขีด จำกัด ในการผูก WCF

ดูเหมือนว่าเมื่อใช้ SSL ร่างกายเอนทิตีคำขอทั้งหมดจะถูกโหลดไว้ล่วงหน้าซึ่งใช้คุณสมบัติ metabase นี้

สำหรับข้อมูลเพิ่มเติมโปรดดู:

ไม่แสดงหน้านี้เนื่องจากเอนทิตีคำขอมีขนาดใหญ่เกินไป iis7


1
การค้นพบของคุณเกี่ยวกับ SSL และ 'uploadReadAheadSize' นั้นดีมาก! .. แต่ฉันไม่แนะนำให้ตั้งเป็นค่าสูงสุด
ผู้เรียน

1

สำหรับใครก็ตามที่เคยมองหาข้อผิดพลาด IIS WCF 413: ขอเอนทิตีเป็นขนาดใหญ่และใช้บริการ WCF ใน Sharepoint นี่คือข้อมูลสำหรับคุณ การตั้งค่าในโฮสต์แอปพลิเคชันและ web.config ที่แนะนำในไซต์ / โพสต์อื่นไม่ทำงานใน SharePoint หากใช้ MultipleBaseAddressBasicHttpBindingServiceHostFactory คุณสามารถใช้ SP Powershell เพื่อรับบริการ SPWebService.Content สร้างออบเจ็กต์ SPWcvSettings ใหม่และอัปเดตการตั้งค่าตามด้านบนสำหรับบริการของคุณ (ไม่มีอยู่) อย่าลืมใช้ชื่อของบริการ (เช่น [yourservice.svc]) เมื่อสร้างและเพิ่มการตั้งค่า ดูเว็บไซต์นี้สำหรับข้อมูลเพิ่มเติมhttps://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service


1

ในกรณีของฉันฉันต้องเพิ่ม "ขนาดข้อความสูงสุดที่ได้รับ" ของสถานที่รับใน BizTalk นอกจากนี้ยังมีค่าเริ่มต้น 64K ดังนั้นทุกข้อความจึงถูกตีกลับโดย BizTAlk โดยไม่คำนึงถึงสิ่งที่ฉันกำหนดค่าไว้ใน web.config ของฉัน


1

ฉันสามารถแก้ปัญหานี้ได้โดยเรียกใช้การโทรหลอก (เช่น IsAlive ส่งคืนจริง) ก่อนคำขอที่มีเนื้อหาขนาดใหญ่ใน wcf channel / client เดียวกัน เห็นได้ชัดว่าการเจรจา ssl เสร็จสิ้นในการโทรครั้งแรก ดังนั้นไม่จำเป็นต้องเพิ่ม Uploadreadaheadsize


0

สำหรับปัญหาเซิร์ฟเวอร์ระยะไกลส่งคืนการตอบสนองที่ไม่คาดคิด: (413) ขอเอนทิตีขนาดใหญ่เกินไปบน WCF ด้วย Resful

โปรดดูการกำหนดค่าอธิบายของฉัน

</client>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true"/>

<bindings>

   <!-- this for restfull service -->
  <webHttpBinding>
    <binding name="RestfullwebHttpBinding"
      maxBufferPoolSize="2147483647"
      maxReceivedMessageSize="2147483647"
      maxBufferSize="2147483647" transferMode="Streamed">

      <readerQuotas 
        maxDepth="2147483647" 
        maxStringContentLength="2147483647"
        maxArrayLength="2147483647" 
        maxBytesPerRead="2147483647" /> 

    </binding>
  </webHttpBinding>
  <!-- end -->

   <!-- this for Soap v.2 -->
  <wsHttpBinding>
    <binding name="wsBinding1" maxReceivedMessageSize="2147483647" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
      <!--UsernameToken over Transport Security-->
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" establishSecurityContext="true"/>
      </security>
    </binding>
  </wsHttpBinding>
   <!-- this for restfull service -->

   <!-- this for Soap v.1 -->
  <basicHttpBinding>
    <binding name="basicBinding1" maxReceivedMessageSize="2147483647" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false" transferMode="Streamed">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      <security mode="None"/>
    </binding>
  </basicHttpBinding>
</bindings> 
<!-- end -->

<services>
  <clear/>

  <service name="ING.IWCFService.CitisecHashTransfer"  >
    <endpoint address="http://localhost:8099/CitisecHashTransfer.svc"
                  behaviorConfiguration="RestfullEndpointBehavior"
                  binding="webHttpBinding"
                  bindingConfiguration="RestfullwebHttpBinding"
                  name="ICitisecHashTransferBasicHttpBinding"
                  contract="ING.IWCFService.ICitisecHashTransfer" />
  </service>

</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="ING.IWCFService.IWCFServiceValidator, ING.IWCFService"/>
      </serviceCredentials>
      <serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="SuccessOrFailure" messageAuthenticationAuditLevel="SuccessOrFailure"/>
      <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="100" maxConcurrentInstances="1000"/>

    </behavior>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="EndpointBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior> 
    <behavior name="RestfullEndpointBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647"  />
      <webHttp/>
    </behavior> 
  </endpointBehaviors>
</behaviors>


0

ในกรณีของฉันฉันได้รับข้อความแสดงข้อผิดพลาดนี้เนื่องจากฉันเปลี่ยนเนมสเปซของบริการและแท็กบริการถูกชี้ไปที่เนมสเปซรุ่นเก่า ฉันรีเฟรชเนมสเปซและข้อผิดพลาดหายไป:

<services>
  <service name="My.Namespace.ServiceName"> <!-- Updated name -->
    <endpoint address="" 
              binding="wsHttpBinding" 
              bindingConfiguration="MyBindingConfiguratioName" 
              contract="My.Namespace.Interface" <!-- Updated contract -->
    />
  </service>
</services>

0

มีข้อผิดพลาดที่คล้ายกันบน IIS Express พร้อม Visual Studio 2017

ข้อผิดพลาด HTTP 413.0 - ขอเอนทิตีใหญ่เกินไป

ไม่แสดงหน้านี้เนื่องจากเอนทิตีคำขอมีขนาดใหญ่เกินไป

สาเหตุส่วนใหญ่:

  • เว็บเซิร์ฟเวอร์ปฏิเสธที่จะให้บริการคำขอเนื่องจากเอนทิตีคำขอมีขนาดใหญ่เกินไป

  • เว็บเซิร์ฟเวอร์ไม่สามารถให้บริการคำขอได้เนื่องจากพยายามต่อรองใบรับรองไคลเอ็นต์ แต่เอนทิตีคำขอมีขนาดใหญ่เกินไป

  • URL คำขอหรือการแมปฟิสิคัลกับ URL (กล่าวคือพา ธ ระบบไฟล์ฟิสิคัลไปยังเนื้อหาของ URL) ยาวเกินไป

สิ่งที่คุณสามารถลอง:

  • ตรวจสอบว่าคำขอถูกต้อง

  • หากใช้ใบรับรองไคลเอ็นต์ให้ลอง:

    • เพิ่ม system.webServer/serverRuntime@uploadReadAheadSize

    • กำหนดค่าปลายทาง SSL ของคุณเพื่อเจรจาใบรับรองไคลเอ็นต์โดยเป็นส่วนหนึ่งของ SSL handshake เริ่มต้น (netsh http เพิ่ม sslcert ... clientcertnegotiation = enable) .vs \ config \ applicationhost.config

\.vs\config\applicationhost.configแก้ปัญหานี้โดยการแก้ไข เปลี่ยนserverRuntimeจากDenyเป็นAllowแบบนี้:

<section name="serverRuntime" overrideModeDefault="Allow" />

หากไม่มีการแก้ไขค่านี้คุณจะได้รับข้อผิดพลาดเช่นนี้เมื่อตั้งค่าuploadReadAheadSize:

ข้อผิดพลาด HTTP 500.19 - ข้อผิดพลาดภายในเซิร์ฟเวอร์

ไม่สามารถเข้าถึงเพจที่ร้องขอได้เนื่องจากข้อมูลคอนฟิกูเรชันที่เกี่ยวข้องสำหรับเพจนั้นไม่ถูกต้อง

ไม่สามารถใช้ส่วนการกำหนดค่านี้ในเส้นทางนี้ สิ่งนี้เกิดขึ้นเมื่อส่วนนี้ถูกล็อกที่ระดับผู้ปกครอง การล็อกเป็นไปตามค่าเริ่มต้น (overrideModeDefault = "Deny") หรือตั้งค่าอย่างชัดเจนโดยแท็กตำแหน่งที่มี overrideMode = "Deny" หรือ allowOverride = "false" แบบเดิม

จากนั้นแก้ไขWeb.configด้วยค่าต่อไปนี้:

<system.webServer>
  <serverRuntime uploadReadAheadSize="10485760" />
...

หากคุณโหวตไม่ลงโปรดพูดว่าทำไม ยากมากที่จะปรับปรุงคำตอบเป็นอย่างอื่น
Ogglas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.