2013-02-07 7 views
3

J'ai une application Windows qui appelle un service WCF pour créer une URL spécifique.Paramètres de configuration côté client

La fonction WCF appelée depuis l'application Windows accepte les détails d'emplacement sous la forme d'un tableau.

Je rencontre un problème lorsque la taille du tableau envoyé à la fonction WCF est faible (par exemple, 10), puis le service renvoie un résultat correct.

Mais lorsque la taille du tableau augmente (par exemple> 200), le service renvoie une requête 400 Bad.

Je ne suis pas sûr que la taille du tableau ou le contenu du tableau causent ce problème.

J'ai essayé de changer le serveur web (service) web.config pour accepter la taille de mémoire tampon maximale.

<bindings> 
<basicHttpBinding> 
<binding name="BasicHttpBinding_IServiceContract" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" 

sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 

maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" 

textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="2147483647" 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> 

<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
      <httpRuntime executionTimeout="90" maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false" 

minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" /> 
    </system.web> 

Je suis toujours confronté au même problème.

Du côté client (ici l'application Windows) comment pouvons-nous définir les paramètres de configuration afin que le client puisse envoyer de grandes données au serveur?

Répondre

2

Vous devez augmenter le quota de lecteurs dans le fichier de configuration du serveur ainsi que dans le fichier de configuration du client.

<readerQuotas maxDepth="2147483647" 
maxStringContentLength="2147483647" 
maxArrayLength="2147483647" 
maxBytesPerRead="2147483647" 
maxNameTableCharCount="2147483647" /> 

Et maxReceivedMessageSize et bufferSize:

<httpTransport transferMode="Buffered" 
maxReceivedMessageSize="2147483647" 
maxBufferSize="2147483647"/> 

Vous pourriez aussi avoir besoin d'ajouter DataContractSerializer dans votre comportement de service.

<serviceBehaviors> 
<behavior name="Your SB"> 
<serviceMetadata httpGetEnabled="True"/> 
<dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
<serviceDebug 
includeExceptionDetailInFaults="False" /> 
</behavior> 
</serviceBehaviors> 
0

Vous devez effectuer les modifications côté client. Changez les deux maxBufferSize et maxReceivedMessageSize. J'ai fait face à un problème similaire hier et je l'ai corrigé en réinitialisant ces valeurs à une valeur plus élevée.

Remarque: En fait, je n'ai apporté aucune modification au service (serveur).