156 votes

(413) Entité de demande trop grande | uploadReadAheadSize

J'ai écrit un service WCF avec .NET 4.0, qui est hébergé sur mon ordinateur Windows 7. x64 Système ultime avec IIS 7.5. L'une des méthodes du service a pour argument un "objet" et j'essaie d'envoyer un byte[] qui contient une image. Tant que la taille du fichier de cette image est inférieure à environ 48 Ko, tout se passe bien. Mais si j'essaie de télécharger une image plus grande, le service WCF renvoie une erreur : (413) Request Entity Too Large. Bien sûr, j'ai passé 3 heures à chercher le message d'erreur sur Google et tous les sujets que j'ai vus à ce sujet suggèrent d'augmenter la propriété 'uploadReadAheadSize'. Ce que j'ai fait, c'est utiliser les commandes suivantes (10485760 = 10MB) :

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

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

J'ai également utilisé IIS Manager pour définir la valeur en ouvrant le site et en allant dans "Configuration Editor" sous Management. Malheureusement, j'obtiens toujours l'erreur "Request Entity Too Large" et cela devient vraiment frustrant !

Quelqu'un sait-il ce que je peux essayer d'autre pour corriger cette erreur ?

8 votes

10485760 = 10MB, pas 1MB

2voto

rekna Points 1424

J'ai pu résoudre ce problème en exécutant un appel factice (par exemple IsAlive retournant true) juste avant la requête avec un contenu important sur le même canal/client wcf. Apparemment, la négation ssl est effectuée lors du premier appel. Il n'est donc pas nécessaire d'augmenter Uploadreadaheadsize.

2voto

Liam Kernighan Points 391

Mon problème a disparu après avoir ajouté ceci :

  <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits
                    maxAllowedContentLength="104857600"
                />
            </requestFiltering>
        </security>
  </system.webServer>

1voto

asawin Points 11

Pour le problème que le serveur distant a renvoyé une réponse inattendue : (413) Request Entity Too Large sur WCF avec Resful

veuillez voir ma configuration d'explication

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

1voto

Ogglas Points 1

J'ai obtenu une erreur similaire sur IIS Express avec Visual Studio 2017.

Erreur HTTP 413.0 - Entité de demande trop grande

La page n'a pas été affichée car l'entité de la requête est trop grande.

Causes les plus probables :

  • Le serveur Web refuse de traiter la demande car l'entité de la demande est est trop grande.

  • Le serveur Web ne peut pas répondre à la demande parce qu'il tente de négocier un certificat client mais l'entité de la demande est trop grande.

  • L'URL de la demande ou le mappage physique de l'URL (c.-à-d. le chemin d'accès physique au contenu de l'URL) est trop long. du système de fichiers vers le contenu de l'URL) est trop long.

Des choses que vous pouvez essayer :

  • Vérifiez que la demande est valide.

  • Si vous utilisez des certificats clients, essayez :

    • Augmentation de system.webServer/serverRuntime@uploadReadAheadSize

    • Configurez votre point de terminaison SSL pour qu'il négocie les certificats clients dans le cadre de la de la poignée de main SSL initiale. (netsh http add sslcert ... clientcertnegotiation=enable) .vs \config\applicationhost.config

Résolvez ce problème en modifiant \.vs\config\applicationhost.config . Interrupteur serverRuntime de Deny a Allow comme ça :

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

Si cette valeur n'est pas éditée, vous obtiendrez une erreur comme celle-ci lors de la configuration uploadReadAheadSize :

Erreur HTTP 500.19 - Erreur de serveur interne

La page demandée n'est pas accessible parce que la données de configuration de la page ne sont pas valides.

Cette section de configuration ne peut pas être utilisée à ce niveau. Cela se produit lorsque la section est verrouillée à un niveau parent. Le verrouillage est soit par par défaut (overrideModeDefault="Deny"), ou défini explicitement par une balise location avec overrideMode="Deny" ou l'ancien allowOverride="false".

Puis modifier Web.config avec les valeurs suivantes :

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

2 votes

Si vous votez contre, veuillez dire pourquoi. Il est très difficile d'améliorer les réponses autrement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X