Программно установить MaxitEmsinobjectgraph
Вопрос
У меня есть приложение, использующее WCF на стороне клиента и сервера. Я получаю ошибки, когда вернул большое количество данных:
Произошла ошибка при попытке сериализации параметра http://tempuri.org/:getcurrentDatabaseobjectsresult.. Отказ Сообщение Innerexception было «максимальным количеством предметов, которые могут быть сериализованы или десериализованы в графике объекта» - «65535». Измените график объекта или увеличьте квоту MaxitEmsinobjectgraph. '. Пожалуйста, смотрите Innerexception для более подробной информации.
(Основная важная вещь заключается в том, что я для увеличения максимальнообязательности).
Я нашел эту статью здесь: Как я могу установить свойство MAXITEMSINOBJECTGRAPH программно из приложения Silverlight? Но кажется, что это только для клиентской стороны, и мне нужно сделать это на сервере.
Решение
Спуститесь, чтобы «контролировать процесс сериализации» направляется (или выполнить поиск MaxitEmsinobjectGraph)
Другие советы
В коде:
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>
Вы хотите указать свойство в атрибуте ServiceBehavior.
[ServiceContract]
[ServiceBehavior(MaxItemsInObjectGraph=100000)]
public interface IDataService
{
[OperationContract]
DataPoint[] GetData();
}