Программно установить MaxItemsInObjectGraph - PullRequest
4 голосов
/ 06 января 2011

У меня есть приложение, использующее WCF на стороне клиента и сервера. Я получаю ошибки при возврате большого количества данных:

Произошла ошибка при попытке сериализации параметра http://tempuri.org/:GetCurrentDatabaseObjectsResult. Сообщение InnerException было «Максимальное количество элементов, которые можно сериализовать или десериализовать в графе объектов, равно« 65535 ». Измените граф объекта или увеличьте квоту MaxItemsInObjectGraph. ». Пожалуйста, смотрите InnerException для более подробной информации.

(главное, чтобы я увеличил MaxItemsInObjectGraph).

Я нашел эту статью здесь: Как я могу программно установить свойство maxItemsInObjectGraph из приложения Silverlight? но, похоже, это только для клиентской стороны, и мне нужно сделать это на сервере.

Ответы [ 3 ]

5 голосов
/ 06 января 2011

В коде:

foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
{
    DataContractSerializerOperationBehavior dataContractBehavior =
                op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                as DataContractSerializerOperationBehavior;
    if (dataContractBehavior != null)
    {
        dataContractBehavior.MaxItemsInObjectGraph = 100000;
    }
}

В конфигурации:

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaivor">
      <serviceAuthorization impersonateCallerForAllOperations="True" />
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="2147483647" />
      <dataContractSerializer maxItemsInObjectGraph="65775" />
    </behavior>
  </serviceBehaviors>
</behaviors>
4 голосов
/ 06 января 2011

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/specifying-data-transfer-in-service-contracts#controlling-the-serialization-process

Перейти к заголовку «Управление процессом сериализации» (или выполнить поиск для maxItemsInObjectGraph)

2 голосов
/ 26 января 2012

Вы хотите указать свойство в атрибуте ServiceBehavior.

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...