Defina programaticamente o maxitemsinObjectGraf
Pergunta
Eu tenho um aplicativo usando o WCF no lado do cliente e do servidor. Recebo erros quando retorno uma grande quantidade de dados:
Houve um erro ao tentar serializar o parâmetro http://tempuri.org/:getCurrentDatabaseObjectSResult. A mensagem Innerexception era 'o número máximo de itens que podem ser serializados ou desserializados em um gráfico de objeto é' 65535 '. Altere o gráfico do objeto ou aumente a cota MaxItemsinObjectgraph. '. Por favor, consulte o InnoRexception para obter mais detalhes.
(O principal importante é que eu tenho que aumentar o maxitemsinObjectGraph).
Eu encontrei este artigo aqui: Como posso definir a propriedade MaxItemsinObjectgraph programaticamente de um aplicativo Silverlight? Mas parece que isso é apenas para o lado do cliente e eu preciso fazer isso no servidor.
Solução
Vá para "controlar o processo de serialização" (ou faça uma pesquisa pelo maxitemsinObjectGraph)
Outras dicas
Em código:
foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dataContractBehavior =
op.Behaviors.Find<DataContractSerializerOperationBehavior>()
as DataContractSerializerOperationBehavior;
if (dataContractBehavior != null)
{
dataContractBehavior.MaxItemsInObjectGraph = 100000;
}
}
Na configuração:
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaivor">
<serviceAuthorization impersonateCallerForAllOperations="True" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="2147483647" />
<dataContractSerializer maxItemsInObjectGraph="65775" />
</behavior>
</serviceBehaviors>
</behaviors>
Você deseja especificar a propriedade no atributo ServiceBehavior.
[ServiceContract]
[ServiceBehavior(MaxItemsInObjectGraph=100000)]
public interface IDataService
{
[OperationContract]
DataPoint[] GetData();
}