Showing posts with label The maximum array length quota (16384) has been exceeded while reading XML data. Show all posts
Showing posts with label The maximum array length quota (16384) has been exceeded while reading XML data. Show all posts

Aug 17, 2012

Modificar Programaticamente Propriedade ReaderQuotas de um Endpoint - WCF


Estava com um problema no seguinte cenário:

Tenho um WCF, onde faço o "SelfHosting" por um Windows Service. Os dados doendereço eu coloco dinamicamente.

Os arquivos que eu iria enviar para o WCF passavam facilmente os 16Kb padrões da configuração.

Para isso utilizei o seguinte código para adicionar no endpoint que adicionei programaticamente (pelo código compilado, não pelo app.config)







                var endpoint = serviceHostImport.AddServiceEndpoint(typeof(IImportFileService), 
                                        MetadataExchangeBindings.CreateMexHttpBinding(), "mex");

                Binding binding = endpoint.Binding;

                XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
                quotas.MaxStringContentLength = int.MaxValue;
                quotas.MaxArrayLength = int.MaxValue;
                quotas.MaxBytesPerRead = int.MaxValue;
                quotas.MaxDepth = 64;
                quotas.MaxNameTableCharCount = int.MaxValue;

                binding.GetType().GetProperty("ReaderQuotas").SetValue(binding, quotas, null);

                serviceHostImport.Open();







Repare que a propriedade é adicionada via Reflection.


com isso é possível modificar programaticamente a propriedade ReaderQuotas  do binding de um endpoint WCF para o máximo possível.

Abraços
Rafael