2010-05-25 3 views
7

Mon service WCF a un contrat d'opération qui accepte, en tant que paramètre, un tableau d'objets. Cela peut potentiellement être assez important. Après avoir cherché des correctifs pour Bad Request: 400, j'ai trouvé la vraie raison: la taille maximale du message.Le quota maximal de taille de message pour les messages entrants (65536) a été dépassé

Je sais que cette question a déjà été posée dans BEAUCOUP endroits. J'ai essayé ce que tout le monde dit: "Augmenter les tailles dans les fichiers de configuration du client et du serveur." J'ai. Ça ne marche toujours pas.

web.config de service My:

<system.serviceModel> 
    <services> 
     <service name="myService"> 
     <endpoint name="myEndpoint" address="" 
        binding="basicHttpBinding" 
        bindingConfiguration="myBinding" 
        contract="Meisel.WCF.PDFDocs.IPDFDocsService" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="myBinding" 
       closeTimeout="00:11:00" 
       openTimeout="00:11:00" 
       receiveTimeout="00:15:00" 
       sendTimeout="00:15:00" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       transferMode="Buffered" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       messageEncoding="Text" 
       textEncoding="utf-8" 
       useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

mon app.config Client:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_IPDFDocsService" 
       closeTimeout="00:11:00" 
       openTimeout="00:11:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:11:00" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" 
       textEncoding="utf-8" 
       transferMode="Buffered" 
       useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" 
         proxyCredentialType="None" 
         realm="" /> 
      <message clientCredentialType="UserName" 
        algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:8451/PDFDocsService.svc" 
       behaviorConfiguration="MoreItemsInObjectGraph" 
       binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IPDFDocsService" 
       contract="PDFDocsService.IPDFDocsService" 
       name="BasicHttpBinding_IPDFDocsService" /> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="MoreItemsInObjectGraph"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Que puis-je peut-être manquant ou faire du tort? C'est comme si le service ignorait ce que j'avais tapé dans maxReceivedBufferSize.

Merci à l'avance, Kyle

MISE À JOUR

Voici deux autres questions stackoverflow où ils jamais reçu de réponse, soit:

https://stackoverflow.com/questions/2880623/maxreceivedmessagesize-adjusted-but-still-getting-the-quotaexceedexception-with

WCF MaxReceivedMessageSize property not taking

+0

Il semble correct en un coup d'œil. Configurez-vous le point de fin dans le code n'importe où? Si tel est le cas, cela peut remplacer les paramètres de configuration. –

+0

Comment hébergez-vous le service? IIS? –

+0

@Jeff: Je crée juste une nouvelle instance de mon client de service, puis j'appelle l'opérationContrat, en passant dans ma classe personnalisée en tant que paramètre. Rien d'extraordinaire. @Simon: J'utilise le serveur de développement ASP .NET. Actuellement, tout est local. – DaleyKD

Répondre

7

dans le fichier de configuration de service, l'attribut « name » est absent de l'élément

<behaviors> 
    <serviceBehaviors> 
    <behavior name="StackOverflow"> 

et il devrait y avoir une référence à ce nom dans l'élément de service:

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="StackOverflow" name="myService"> 
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="myBinding" 

En général, il est une bonne idée pour valider, sinon éditer, vos fichiers de configuration WCF à l'aide de "l'éditeur de configuration de service WCF", qui est appelé depuis l'élément de menu "Outils" de Visual Studio.

De même, aucun comportement de point de terminaison n'est défini pour le service. Je ne sais pas si cela compte.

+0

Me croiriez-vous si je vous disais que quand j'ajoute un nom à mon comportement, le WCFTestClient me donne l'erreur: "Erreur: Impossible d'obtenir des métadonnées Les métadonnées contiennent une référence qui ne peut pas être résolue Type de contenu application/soap + xml; charset = utf-8 non pris en charge par le service Les liaisons client et service peuvent être incompatibles Le serveur distant a renvoyé une erreur: (415) Type de support non pris en charge.HTTP GET Le document HTML ne contient pas d'informations de découverte de service Web. C'est pourquoi je n'ai pas inclus de nom pour mon comportement. – DaleyKD

+0

Je ne suis toujours pas sûr de la véritable solution à ce problème, mais j'ai réussi à résoudre mon problème ORIGINAL, ce qui rend ce problème impossible. FWIW, il semble que j'ai été capable de me débarrasser de l'erreur ci-dessus en faisant SURE mon service utilisé behaviorConfiguration. Merci! – DaleyKD

0

J'ai eu le même problème avec le test WCF et j'avais défini le fichier de configuration corectly. Si ce n'est pas un problème de votre fichier de configuration, je suggère de tester le service avec un autre programme, par exemple: SOAP UI, je pense que cette erreur ne vient pas du service, c'est du test WCF.

Questions connexes