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

No comments:

Post a Comment