2009-06-23 7 views
3

Je reçois l'exception suivante lors de l'envoi (ou de la réception) d'un tableau d'octets à un service C#.Modification de la propriété MaxArrayLength sur l'objet XmlDictionaryReaderQuotas utilisé lors de la création du lecteur XML

There was an error deserializing the object of type System.Byte[]. 
The maximum array length quota (16384) has been exceeded while reading XML data. 
This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. 
Line 6, position 34838.'. 
Please see InnerException for more details 

Pour ce que je peux comprendre le XmlDictionaryreader est créé automatiquement par le webservice. Alors, comment puis-je changer la propriété "MaxArrayLength"?

Voici le code de mise en œuvre:

public string addFile(string sharePointServer, string documentLibrary, 
          byte[] content, string fileName) 
    { 
     try 
     { 
      SPWeb spWeb = new SPSite(sharePointServer).OpenWeb(); 
      SPFolder spFolder = spWeb.GetFolder(documentLibrary); 
      SPFileCollection spFileCollection = spFolder.Files; 
      SPFile spFile = spFileCollection.Add(fileName, content, true); 
      return spFile.TimeCreated.ToLongDateString() + "::" + spFile.Title; 
     } 
      catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

fichiers < 16kb sont téléchargés.

Les fichiers> 16 Ko ne le sont pas.

Les fichiers> 10mb sont téléchargés sans problème.

Où cette propriété est-elle configurée?

Répondre

7

Est-ce un service WCF? Si oui, vous pouvez modifier le maxarraylength dans la liaison comme on le voit sur ce SO après:

post

post-scriptum Pourquoi utiliser un service personnalisé lorsque des services OOTB Sharepoint peuvent télécharger des fichiers? à savoir le Lists.asmx comme dans cet article:

article

+0

@Colin: Peut-être trop évident pour vous, mais je Je n'ai pas compris. Voulez-vous dire que la configuration est dans le fichier posté par la question: http://bit.ly/QMhME? quel fichier est-ce. La réponse acceptée pour cette question redirige vers un autre message qui à son tour redirige vers un téléchargement. Si vous connaissez la réponse à mon problème, cela vous dérangerait-il de le poster ici? Est-ce un service WCF? J'imagine. Je suis le client invoquant ce service avec Java, ne créant pas vraiment le ws. Je vais jeter un oeil à la liste.asmx vous avez posté. Pourquoi n'a pas été utilisé? Je suppose que personne ne savait que ça existait. – OscarRyz

+0

OK, donc vous utilisez Java. Veuillez mettre à jour votre question pour que ce soit clair. Ma question signifiait, est le service que vous appelez un service web C# "à l'ancienne", ou un "nouveau" Service Windows Communication Foundation "Ma réponse ne vous aide que si la seconde est vraie L'exception que vous montrez, est celle de ? C# ou Java PS Ceci est un exemple de code pour changer Qouta: EndpointAddress endPoint = new EndpointAddress ("http: // adresse/service"); liaison wsHttpBinding = new wSHttpBinding(); XmlDictionaryReaderQuotas readerQuotas = XmlDictionaryReaderQuotas. Max: binding.ReaderQuotas = lecteurQuotas; – Colin

+0

PS Le Lists.asmx (http: //urlofsite/_vti_bin/Lists.asmx) est vraiment le chemin à parcourir, vu qu'il est hors de la boîte de fonctionnalité. – Colin

1

Ajouter un élément <readerQuotas> dans l'élément <binding> et ajouter MaxArrayLength propriété

<bindings> 
    <wsHttpBinding> 
     <binding name ="Your WSHttpBinding Name" sendTimeout="00:05:00" maxReceivedMessageSize="2147483647"> 
      <security mode="None"></security> 
      <readerQuotas maxStringContentLength="134217728" maxArrayLength="2147483647" /> 
      <reliableSession enabled="true"/> 
     </binding> 
    </wsHttpBinding> 
</bindings> 
Questions connexes