2009-08-27 7 views
15

J'ai un côté serveur suivant app.config pour un service WCF:WCF maxReceivedMessageSize ne pas être lu de config

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="default" maxReceivedMessageSize="5000000"> 
      <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="Core.TOAService.Service1Behavior" 
     name="Core.TOAService.TOAService"> 
     <endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Core.TOAService.Service1Behavior"> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Lorsque je tente de passer ce service un fichier largish (seulement ~ 250KB), je reçois une exception enregistrée dans le fichier svclog:

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

Comme vous pouvez le voir dans la section de liaison en haut de la config, j'ai essayé de régler le maxReceivedMessageSize à 5.000.000, mais le service pense toujours qu'il est réglé sur la valeur par défaut 65536. Toutes les idées sur ce qui est mal ou quel est l'élément de liaison "approprié"?

Répondre

27

Il ya plus de paramètres :-) Essayez "maxBufferPoolSize" et "maxBufferSize" sur la balise <binding>.

Mais le plus gros problème est: votre point de terminaison fait pas référence cette configuration de liaison!

<endpoint address="" 
      binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 

Vous devez ajouter une référence à ce afin qu'il soit utile - il suffit de l'appeler « default » ne fonctionne pas .....

<endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="default" 
      contract="Core.TOAService.ITOAService"> 

Vous êtes en avance sur votre temps ;-) Dans WCF 4 (avec .NET 4.0 - dans le courant de l'année 2009), vous pourrez définir des "configurations de liaison par défaut" sans devoir les nommer et les référencer explicitement - mais pour l'instant, vous devez créer un lien entre votre point de terminaison et sa liaison et toute configuration de liaison (ou de comportement) que vous avez!

Marc

+0

Oui, vous devez faire référence à la configuration de liaison. Les modifications du tampon ne sont probablement pas nécessaires. –

+0

Il n'est jamais vraiment clair si et lequel des trois changements de tampon sont vraiment nécessaires - il est utile d'essayer et de voir. Il n'y a vraiment pas de bonne documentation complète et d'explication sur la façon de modifier ces paramètres, malheureusement .... –

+0

Doh, les serveurs me conviennent pour utiliser VS2010 pour construire un service 3.5! Merci beaucoup, c'est réglé. –

1

Il y a plusieurs endroits que vous devez définir la taille. Dans votre cas, je pense que vous devez ajouter des quotas de lecture. Voici un exemple:

<basicHttpBinding> 
    <binding name="httpBasicBinding_Service" closeTimeout="00:03:00" 
     openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00" 
     maxBufferSize="2000001" 
     maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001"> 
     <readerQuotas maxDepth="2000001" maxStringContentLength="2000001" 
     maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" /> 
    </binding> 
    </basicHttpBinding> 
15

Si vous obtenez encore ce message d'erreur lors de l'utilisation du client test WCF, il est parce que le client dispose d'un cadre MaxBufferSize séparé.

Pour corriger le problème:

  1. Clic droit sur le nœud Config File au bas de l'arbre
  2. Sélectionnez Modifier avec SvcConfigEditor

Liste des les paramètres modifiables apparaîtront, y compris MaxBufferSize.

Remarque:clients proxy généré automatiquement également mis MaxBufferSize à 65536 par défaut.

+1

Bonne prise! Cela a résolu mon problème ... –

+0

MERCI YOUUUU !!! – RoeeK