2009-06-23 3 views
3

Я получаю следующее исключение при отправке (или получении) байтового массива в службу C#.Изменение свойства MaxArrayLength объекта XmlDictionaryReaderQuotas, используемого при создании 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 

Для чего я могу понять, что XmlDictionaryreader создается автоматически с помощью webservice.

Итак, как я могу изменить свойство MaxArrayLength?

Это код реализации:

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; 
     } 
    } 

< Файлы 16kb загружены.

Файлы> 16kb нет.

Файлы> 10mb загружаются без проблем.

Где эта конфигурация настроена?

ответ

7

Это сервис WCF? Если да, то вы можете изменить MaxArrayLength в связывании, как видно на этом SO сообщение:

post

P.S. Зачем использовать пользовательскую службу, если есть службы OOTB Sharepoint, которые могут загружать файлы? т.е. Lists.asmx как в этой статье:

article

+0

@Colin: Это может быть слишком очевидным для вас, но я не совсем понял. Вы говорите, что конфигурация находится в файле, отправленном вопросом: http://bit.ly/QMhME? какой файл это. Принятый ответ на этот вопрос перенаправляется на другой пост, который, в свою очередь, перенаправляется на скачивание. Если вы знаете ответ на мою проблему, не могли бы вы опубликовать ее здесь? Это служба WCF? Я полагаю. Я клиент, вызывающий эту службу с Java, не создавая ws. Я посмотрю на List.asmx, который вы разместили. Почему не было использовано? Думаю, никто не знал, что он существует. – OscarRyz

+0

ОК, поэтому вы используете Java. Пожалуйста, обновите свой вопрос, чтобы это было ясно. Мой вопрос означает, что служба, которую вы вызываете «старомодный» веб-сервис C#, или «новая служба Windows Communication Foundation». Мой ответ помогает только в том случае, если второе верно. Исключением, которое вы показываете, является то, что из ? C# или Java PS Это пример кода для изменения qouta: EndpointAddress ENDPOINT = новый EndpointAddress ("HTTP: // адрес/Service"); WsHttpBinding связывание = новый WSHttpBinding(); XmlDictionaryReaderQuotas readerQuotas = XmlDictionaryReaderQuotas. Max; binding.ReaderQuotas = readerQuotas; – Colin

+0

PS. Список.asmx (http: //urlofsite/_vti_bin/Lists.asmx) - это действительно способ пойти, видя, что это из коробки. – Colin

1

Добавить <readerQuotas> элемент внутри <binding> элемента и добавить MaxArrayLength свойство

<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> 
Смежные вопросы