web-dev-qa-db-fra.com

Où placer la propriété MaxReceivedMessageSize dans le fichier web.config du service WCF?

Je dois modifier mon fichier web.config et ajouter la propriété MaxReceivedMessageSize dans My web.config - mais où? 

Le quota de taille maximale des messages entrants (65 536) a été dépassé. Pour augmenter le quota, utilisez la propriété MaxReceivedMessageSize sur l'élément de liaison approprié.

   <?xml version="1.0"?>
   <configuration>
      <system.web>
        <compilation debug="false"><assemblies><add Assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /></assemblies></compilation>
      </system.web>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
     <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
      </system.webServer>
12
marko

Vous devez définir une configuration de liaison pour la liaison que vous souhaitez utiliser, puis vos services (côté serveur) et vos clients (côté client) pour utiliser cette liaison et cette configuration de liaison:

<system.serviceModel>
   <bindings>
      <!-- pick whichever binding you want .... -->
      <basicHttpBinding>
         <!-- binding configuration with a name -->
         <binding name="ExtendedMaxSize"  
             maxBufferSize="999999" maxReceivedMessageSize="999999" />
      </basicHttpBinding>
  </bindings>
  <services>
    <service name="Yournamespace.YourServiceClass" behaviorConfiguration="...">
      <!-- define endpoint with your binding and the name of the binding configuration
           that you have defined just above -->
      <endpoint address=""
                binding="basicHttpBinding"
                bindingConfiguration="ExtendedMaxSize"  
                contract="Yournamespace.IYourServiceContract" />
    </service>
  </services>
32
marc_s

Pour aider ceux qui peuvent se retrouver ici comme je l'ai fait ……………. Je ne peux pas encore ajouter aux commentaires ci-dessus (en général, quelqu'un a déjà les réponses bien avant que le problème ne se pose), je dois donc ajouter une réponse. 

J'ai une application MVC 4 et je soupçonne que l'échantillon initial ci-dessus provient du fichier web.config du projet de service WCF actuel. L'un des commentaires mentionne qu'ils soupçonnent qu'il s'agit d'une application MVC 4 et des paramètres de configuration par défaut. 

Mais comment résoudre le problème? D'après des recherches plus poussées, il apparaît que le changement doit en réalité être apporté à la configuration web pour le CLIENT, autrement dit à la configuration Web pour le projet avec le service REFERENCE to WCF. Vous constaterez qu'il est beaucoup plus facile de faire le changement ici. Cette version de web.config ressemblera réellement à ce que vous recherchez.

Cela a fonctionné facilement pour moi et résolu mon problème.

2
mly
  1. Pas besoin, contrairement à ce que l'on prétend souvent, de définir sur le serveur.
  2. Contrairement à ce que dit MSDN, il ne suffit pas de définir la limite pour l'élément de liaison de transport. Besoin de se lier aussi. Par exemple: 

var targetBinding = new BasicHttpsBinding();

targetBinding.MaxReceivedMessageSize = MaxWcfMessageSize;
targetBinding.MaxBufferPoolSize = MaxWcfMessageSize;
targetBinding.MaxBufferSize = MaxWcfMessageSize;

var targetBindingElements = targetBinding.CreateBindingElements();
var httpsBindElement = targetBindingElements.Find<HttpsTransportBindingElement>();

httpsBindElement.MaxReceivedMessageSize = MaxWcfMessageSize;
httpsBindElement.MaxBufferPoolSize = MaxWcfMessageSize;
httpsBindElement.MaxBufferSize = MaxWcfMessageSize;

TextMessageEncodingBindingElement tmbebe = targetBindingElements.Find<TextMessageEncodingBindingElement>();
tmbebe.ReaderQuotas.MaxArrayLength = MaxWcfMessageSize;
1
Sergei Meleshchuk