2008-09-25 10 views
3

J'ai un service web simple, il faut 2 paramètres l'un est un simple jeton de sécurité xml, l'autre est généralement une longue chaîne de caractères XML. Cela fonctionne avec des chaînes courtes mais des chaînes plus longues donnent un message d'erreur 400. maxMessageLength n'a rien fait pour permettre des chaînes plus longues.WCF - Comment accepter les chaînes longues en tant que paramètres

Répondre

2

Vous devez également supprimer les limitations de quotas. Voici comment vous pouvez le faire en code avec une liaison Tcp. J'ai ajouté du code qui montre la suppression des problèmes de timeout car l'envoi de très gros arguments entraîne généralement des problèmes de timeout. Donc, utilisez le code judicieusement ... Bien sûr, vous pouvez également définir ces paramètres dans le fichier de configuration.

 NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, true); 

     // Allow big arguments on messages. Allow ~500 MB message. 
     binding.MaxReceivedMessageSize = 500 * 1024 * 1024; 

     // Allow unlimited time to send/receive a message. 
     // It also prevents closing idle sessions. 
     // From MSDN: To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.’ 
     binding.ReceiveTimeout = TimeSpan.MaxValue; 
     binding.SendTimeout = TimeSpan.MaxValue; 

     XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas(); 

     // Remove quotas limitations 
     quotas.MaxArrayLength = int.MaxValue; 
     quotas.MaxBytesPerRead = int.MaxValue; 
     quotas.MaxDepth = int.MaxValue; 
     quotas.MaxNameTableCharCount = int.MaxValue; 
     quotas.MaxStringContentLength = int.MaxValue; 
     binding.ReaderQuotas = quotas; 
3

Après la réponse sur les quotas que je viens de faire tout ce qui dans le web.config

<bindings> 
    <wsHttpBinding> 
    <binding name="WSHttpBinding_IPayroll" maxReceivedMessageSize="6553600"> 
     <security mode="None"/> 
     <readerQuotas maxDepth="32" 
        maxStringContentLength="6553600" 
        maxArrayLength="16384" 
        maxBytesPerRead="4096" 
        maxNameTableCharCount="16384" /> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
+0

Combien de temps votre chaîne? Et quel contrat utilisez-vous? J'ai MessageContract et la chaîne est longue de 64k caractères. – Tuoski

Questions connexes