Quota máxima de tamanho da matriz

Estou escrevendo um pequeno aplicativo WCF / WPF para resize imagens, mas o WCF está me dando dor quando tento enviar uma imagem de tamanho 28K para o meu serviço do cliente. O serviço funciona bem quando eu envio imagens menores. Imediatamente assumi que esse era um problema de configuração e procurei na Web as postagens referentes à propriedade MaxArrayLength na configuração de binding. Eu elevei os limites dessas configurações no cliente e no servidor para o máximo 2147483647, mas ainda assim recebo o seguinte erro:

O formatador emitiu uma exceção ao tentar desserializar a mensagem: Ocorreu um erro ao tentar desserializar o parâmetro http://mywebsite.com/services/servicecontracts/2009/01:OriginalImage . A mensagem InnerException era ‘Ocorreu um erro ao desserializar o object do tipo System.Drawing.Image. A cota de comprimento máximo de matriz (16384) foi excedida durante a leitura de dados XML. Essa cota pode ser aumentada alterando a propriedade MaxArrayLength no object XmlDictionaryReaderQuotas usado ao criar o leitor XML. ‘. Por favor, veja InnerException para mais detalhes.

Eu fiz o meu cliente e servidor configs o mesmo e eles se parecem com o seguinte: Servidor:

                                  

e minha configuração de cliente se parece com:

                       

Parece que não importa o que eu definir esses valores para eu ainda recebo um erro dizendo wcf não pode serializar meu arquivo porque é maior que 16384. Alguma idéia?

Atualização: o endereço de e-mail na tag userPrincipalName foi alterado para minha privacidade

Meu Mau – Eu esqueci de aplicar minha configuração de binding ao meu endpoint na minha configuração do lado do servidor. A configuração do servidor deve ler:

                                   

Observe que o bindingConfiguration = “NetTcpBinding_ImageResizerServiceContract” foi adicionado ao terminal netTcp. Meu aplicativo agora funciona com imagens maiores. Doce.

Por favor, adicione o na binding.

Esse é o principal problema ao carregar e baixar o byte [], isso resolveu o meu problema.

      

Eu utilizei o Microsoft SDK SvcConfigEditor. Você tem isso, se você usar o Visual Studio (que tem sua própria versão). Também é um download gratuito.

No seu disco rígido (verifique Arquivos de Programas e Arquivos de Programas (x86)):

C: \ Arquivos de Programas (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ Ferramentas NETFX 4.0 \ SvcConfigEditor.exe

C: \ Arquivos de Programas \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ Ferramentas NETFX 4.0 \ SvcConfigEditor.exe

Se você tiver várias instalações do Microsoft SDK, qual versão você usará dependerá de qual versão do .NET você está desenvolvendo. A ferramenta lançará um erro para informar que você tentou abrir o arquivo .dll sob a versão incorreta.

Para usar a ferramenta, aponte para o arquivo .dll do seu serviço e deixe a ferramenta fazer o trabalho pesado. Isso é particularmente útil se você tiver serviços falando com serviços (serviços proxies). Além disso, lembre-se de que você provavelmente precisará de uma configuração para o cliente (no aplicativo) e as configurações do servidor (no serviço da web).

Eu estava faltando uma configuração no ponto de extremidade do lado do servidor. Eu tive que fazer duas coisas:

  1. Coloque um endpoint na minha configuração do lado do servidor, configurado usando o SvcConfigEditor
  2. Lembre-se de definir o MaxArrayLength na ferramenta SvcConfigEditor

Além disso, o ASP.NET estava sendo exigente quanto a esse valor, portanto, você pode tentar simplificar sua binding de configuração e desativá-la:

   

Ele está funcionando, anteriormente mostrando a referência de net.tcp: //myservice.com/Ac_Service.svc/mex ao navegar pelo serviço wcf, mas agora é http://myservice.com/Ac_Service.svc?wsdl

funcionará no futuro também, sem qualquer problema.