development

(413) 요청 엔티티가 너무 큼 |

big-blog 2020. 7. 1. 07:35
반응형

(413) 요청 엔티티가 너무 큼 | uploadReadAheadSize


x64IIS 7.5가 설치된 Windows 7 Ultimate 시스템 에서 호스팅되는 .NET 4.0으로 WCF 서비스를 작성했습니다 . 서비스 메소드 중 하나에 인수로 '객체'가 있으며 그림이 포함 된 byte []를 보내려고합니다. 이 사진의 파일 크기가 대략 다음보다 작습니다. 48KB, 모두 잘 작동합니다. 그러나 더 큰 그림을 업로드하려고하면 WCF 서비스가 오류를 반환합니다. (413) Request Entity Too Large.물론 3 시간 동안 오류 메시지를 인터넷 검색 했으며이 주제에 대해 본 모든 주제는 '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 관리자를 사용하여 사이트를 열고 관리 아래의 "구성 편집기"로 이동하여 값을 설정했습니다. 불행히도 여전히 Request Entity Too Large 오류가 발생하고 정말 실망 스럽습니다!

아무도 내가이 오류를 해결하려고 할 수있는 것을 알고 있습니까?


그것은 IIS의 문제가 아니라 WCF의 문제입니다. 기본적으로 WCF는 큰 메시지로 인한 서비스 거부 공격을 피하기 위해 메시지를 65KB로 제한합니다. 또한 MTOM을 사용하지 않으면 byte []를 base64로 인코딩 된 문자열로 보냅니다 (33 % 증가) => 48KB * 1,33 = 64KB

이 문제를 해결하려면 더 큰 메시지를 수락하도록 서비스를 재구성해야합니다. 이 문제는 이전에 400 잘못된 요청 오류를 발생 시켰지만 최신 버전에서 WCF는이 유형의 오류에 대한 올바른 상태 코드 인 413을 사용하기 시작했습니다.

maxReceivedMessageSize바인딩에서 설정해야합니다 . 을 설정해야 할 수도 있습니다 readerQuotas.

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

WCF REST 서비스를 사용하는 IIS 7.5와 동일한 문제가 발생했습니다. 65k를 초과하는 파일을 POST를 통해 업로드하려고하면 오류 413 "요청 엔티티가 너무 큼"이 반환됩니다.

가장 먼저 이해해야 할 것은 web.config에서 어떤 종류의 바인딩을 구성했는지입니다. 여기 좋은 기사가 있습니다 ...

BasicHttpBinding 및 WsHttpBinding 및 WebHttpBinding

REST 서비스가있는 경우 "webHttpBinding"으로 구성해야합니다. 수정 사항은 다음과 같습니다.

<system.serviceModel>

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

나는 같은 문제가 있었고 uploadReadAheadSize해결했다.

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

"값은 0과 2147483647 사이 여야합니다."

cmd-thing을 원하지 않으면 applicationHost.config-fle에서 쉽게 설정됩니다.

그 위치에서 WindowsFOLDER\System32\inetsrv\config(2008 서버).

메모장으로 열어야합니다. 먼저 파일 백업을 수행하십시오.

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>예를 들어 이전 마지막으로 놓으면 어디에 있는지 알 수 있습니다.

문제가 해결되기를 바랍니다. 너무 많은 게시물로 인해 응용 프로그램이 정지되어 (413) 요청 엔티티가 너무 큼 오류가 발생 하는 SSL 오버 헤드 문제였습니다 .


maxWCF 서비스 구성 파일의 바인딩 내에서 설정을 설정 했지만이 오류 메시지가 나타납니다 .

<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>

누군가가 고통을 덜어주기를 바랍니다.


이것은 문제를 해결하는 데 도움이되었습니다 (한 줄-가독성 / 복사 가능성을 위해 나눕니다).

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

이 스레드의 모든 솔루션을 시도했지만이 문제가 발생하고 SSL (예 : https)을 통해 서비스에 연결하는 경우 다음과 같은 도움이 될 수 있습니다.

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

요약하면 (링크가 나중에 중단 될 경우) 요청이 충분히 클 경우 클라이언트와 서비스 간의 인증서 협상이 무작위로 실패합니다. 이런 일이 발생하지 않도록하려면 SSL 바인딩에서 특정 설정을 사용해야합니다. IIS 서버에서 수행해야 할 단계는 다음과 같습니다.

  1. cmd 또는 powershell을 통해을 실행하십시오 netsh http show sslcert. 현재 구성이 제공됩니다. 나중에 다시 참조 할 수 있도록이 방법을 저장하고 싶을 것입니다.
  2. "클라이언트 인증서 협상"이 비활성화되어 있습니다. 이것이 문제 설정입니다. 다음 단계는이를 활성화하는 방법을 보여줍니다.
  3. 불행히도 기존 바인딩을 변경할 수있는 방법이 없습니다. 삭제 한 후 다시 추가해야합니다. 앞에서 저장 한 구성에 표시된 IP : 포트가있는 netsh http delete sslcert <ipaddress>:<port>곳에서 실행하십시오 <ipaddress>:<port>.
  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=...하여 작동 시키십시오.


uploadReadAheadSize에게 int.MaxValue를 설정 하면 WCF 바인딩에 대한 제한을 늘린 후에도 문제가 해결되었습니다.

SSL을 사용할 때이 메타베이스 속성이 사용되는 전체 요청 엔터티 본문이 미리로드 된 것 같습니다.

자세한 내용은 다음을 참조하십시오.

요청 엔티티가 너무 커서 페이지가 표시되지 않았습니다. iis7


For anyone else ever looking for an IIS WCF error 413 : Request entity to large and using a WCF service in Sharepoint, this is the information for you. The settings in the application host and web.config suggested in other sites/posts don't work in SharePoint if using the MultipleBaseAddressBasicHttpBindingServiceHostFactory. You can use SP Powershell to get the SPWebService.Content service, create a new SPWcvSettings object and update the settings as above for your service (they won't exist). Remember to just use the name of the service (e.g. [yourservice.svc]) when creating and adding the settings. See this site for more info https://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service


In my case I had to increase the "Maximum received message size" of the Receive Location in BizTalk. That also has a default value of 64K and so every message was bounced by BizTAlk regardless of what I configured in my web.config


I've been able to solve this by executing a dummy call ( e.g. IsAlive returning true ) just before the request with large content on the same wcf channel/client. Apparently ssl negotation is done on the first call. So no need to increase Uploadreadaheadsize.


for issue the remote server returned an unexpected response: (413) Request Entity Too Large on WCF with Resful

please see my explain configuration

</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>


In my case, I was getting this error message because I was changed the service's namespace and services tag was pointed to the older namespace. I refreshed the namespace and the error disapear:

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

Got a similar error on IIS Express with Visual Studio 2017.

HTTP Error 413.0 - Request Entity Too Large

The page was not displayed because the request entity is too large.

Most likely causes:

  • The Web server is refusing to service the request because the request entity is too large.

  • The Web server cannot service the request because it is trying to negotiate a client certificate but the request entity is too large.

  • The request URL or the physical mapping to the URL (i.e., the physical file system path to the URL's content) is too long.

Things you can try:

  • Verify that the request is valid.

  • If using client certificates, try:

    • Increasing system.webServer/serverRuntime@uploadReadAheadSize

    • Configure your SSL endpoint to negotiate client certificates as part of the initial SSL handshake. (netsh http add sslcert ... clientcertnegotiation=enable) .vs\config\applicationhost.config

Solve this by editing \.vs\config\applicationhost.config. Switch serverRuntime from Deny to Allow like this:

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

If this value is not edited, you will get an error like this when setting uploadReadAheadSize:

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false".

Then edit Web.config with the following values:

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

참고URL : https://stackoverflow.com/questions/10122957/413-request-entity-too-large-uploadreadaheadsize

반응형