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.

Foi útil?

Solução

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/specification-data-transfer-in-serveice-contracts#controlling-treialization-process

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(); 
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top