Eu escrevi um serviço WCF com o .NET 4.0, hospedado no meu sistema Windows 7 x64
Ultimate com o IIS 7.5. Um dos métodos de serviço tem um 'objeto' como argumento e estou tentando enviar um byte [] que contém uma imagem. Contanto que o tamanho do arquivo desta imagem seja menor que aprox. 48KB, tudo vai bem. Mas se estou tentando fazer upload de uma foto maior, o serviço WCF retorna um erro: (413) Request Entity Too Large.
é claro que passei 3 horas pesquisando a mensagem de erro no Google e todos os tópicos que vi sobre esse assunto sugerem aumentar a propriedade 'uploadReadAheadSize'. Então, o que eu fiz foi usar os seguintes comandos (10485760 = 10MB):
"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"
"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"
Também usei o Gerenciador do IIS para definir o valor abrindo o site e indo para o "Editor de Configuração" em Gerenciamento. Infelizmente ainda estou recebendo o erro Solicitar entidade muito grande e está ficando realmente frustrante!
Alguém sabe o que mais eu posso tentar corrigir esse erro?
Respostas:
Isso não é problema do IIS, mas o problema do WCF. Por padrão, o WCF limita as mensagens a 65 KB para evitar ataques de negação de serviço com mensagens grandes. Além disso, se você não usar o MTOM, ele enviará o byte [] para a string codificada em base64 (aumento de 33% no tamanho) => 48KB * 1,33 = 64KB
Para resolver esse problema, você deve reconfigurar seu serviço para aceitar mensagens maiores. Esse problema anteriormente disparava o erro 400 Bad Request, mas na versão mais recente o WCF começou a usar 413, que é o código de status correto para esse tipo de erro.
Você precisa definir
maxReceivedMessageSize
sua ligação. Você também pode precisar definirreaderQuotas
.fonte
Eu estava tendo o mesmo problema com o IIS 7.5 com um serviço REST WCF. Tentando enviar via POST qualquer arquivo acima de 65k e retornaria o Erro 413 "Solicitar entidade muito grande".
A primeira coisa que você precisa entender é que tipo de ligação você configurou no web.config. Aqui está um ótimo artigo ...
BasicHttpBinding vs WsHttpBinding vs WebHttpBinding
Se você tiver um serviço REST, precisará configurá-lo como "webHttpBinding". Aqui está a correção:
fonte
Eu tive o mesmo problema e defini-
uploadReadAheadSize
lo resolvi:http://www.iis.net/configreference/system.webserver/serverruntime
"O valor deve estar entre 0 e 2147483647."
É fácil configurá-lo no applicationHost.config-fle se você não quiser fazer uma coisa de cmd.
Está localizado em
WindowsFOLDER\System32\inetsrv\config
(servidor 2008).Você deve abri-lo com o bloco de notas. Faça um backup do arquivo primeiro.
De acordo com os comentários em config, a maneira recomendada de desbloquear seções é usando uma tag de localização:
Então você pode escrever na parte inferior (já que ela não existe antes). Eu escrevo
maxvalue
aqui - escreva seu próprio valor, se quiser.Se você colocar o último antes,
</configuration>
por exemplo, você sabe onde está.Espero que resolva seus problemas. Foi um problema de sobrecarga de SSL para mim, onde muita postagem congelou o aplicativo, gerando um erro (413) Solicitar entidade muito grande .
fonte
maxReceivedMessageSize
como int.MaxValue, isso funcionou. Gostaria de saber se há alguma grande preocupação em definir essa opção para int.MaxValue também?Eu estava recebendo essa mensagem de erro, mesmo tendo as
max
configurações definidas na ligação do meu arquivo de configuração do serviço WCF:Parecia que essas configurações de ligação não estavam sendo aplicadas, portanto, a seguinte mensagem de erro:
.
O problema
Percebi que o
name=""
atributo dentro da<service>
tag do nãoweb.config
é um campo de texto livre, como eu pensava. É o nome completo de uma implementação de um contrato de serviço, conforme mencionado nesta página de documentação .Se isso não corresponder, as configurações de encadernação não serão aplicadas!
Espero que isso poupe a alguém uma dor ...
fonte
Se você está enfrentando esse problema, apesar de tentar todas as soluções neste segmento, e está se conectando ao serviço via SSL (por exemplo, https), isso pode ajudar:
http://forums.newatlanta.com/messages.cfm?threadid=554611A2-E03F-43DB-92F996F4B6222BC0&#top
Para resumir (caso o link acabe no futuro), se suas solicitações forem grandes o suficiente, a negociação do certificado entre o cliente e o serviço falhará aleatoriamente. Para impedir que isso aconteça, será necessário ativar uma certa configuração em suas ligações SSL. No servidor IIS, eis as etapas que você precisará executar:
netsh http show sslcert
. Isso fornecerá sua configuração atual. Você vai querer salvá-lo de alguma forma para poder referenciá-lo novamente mais tarde.netsh http delete sslcert <ipaddress>:<port>
onde<ipaddress>:<port>
está a porta IP: mostrada na configuração que você salvou anteriormente.netsh http add sslcert
aqui (MSDN), mas na maioria dos casos, seu comando será semelhante a este:netsh http add sslcert ipport=<ipaddress>:<port> appid=<application ID from saved config including the {}> certhash=<certificate hash from saved config> certstorename=<certificate store name from saved config> clientcertnegotiation=enable
Se você tiver várias ligações SSL, repetirá o processo para cada uma delas. Espero que isso ajude a salvar outra pessoa das horas e horas de dor de cabeça que esse problema me causou.
Edição: Na minha experiência, você não pode realmente executar o
netsh http add sslcert
comando diretamente da linha de comando. Você precisará inserir o prompt netsh primeiro digitandonetsh
e, em seguida, emitir seu comando comohttp add sslcert ipport=...
para que ele funcione.fonte
Isso me ajudou a resolver o problema (uma linha - divisão por legibilidade / capacidade de cópia):
fonte
Para mim, definir o valor
uploadReadAheadSize
para int.MaxValue também corrigiu o problema, depois de aumentar os limites na ligação do WCF.Parece que, ao usar SSL, todo o corpo da entidade da solicitação é pré-carregado, para o qual essa propriedade da metabase é usada.
Para mais informações, consulte:
A página não foi exibida porque a entidade de solicitação é muito grande. iis7
fonte
Para qualquer outra pessoa que esteja procurando por um erro 413 do WCF do IIS: solicite uma entidade grande e use um serviço WCF no Sharepoint, essas são as informações para você. As configurações no host do aplicativo e no web.config sugeridas em outros sites / postagens não funcionam no SharePoint se você usar o MultipleBaseAddressBasicHttpBindingServiceHostFactory. Você pode usar o SP Powershell para obter o serviço SPWebService.Content, criar um novo objeto SPWcvSettings e atualizar as configurações conforme acima para o seu serviço (elas não existirão). Lembre-se de usar apenas o nome do serviço (por exemplo, [YOURService.svc]) ao criar e adicionar as configurações. Consulte este site para obter mais informações https://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service
fonte
No meu caso, tive que aumentar o "Tamanho máximo da mensagem recebida" do Local de recebimento no BizTalk. Isso também tem um valor padrão de 64K e, portanto, todas as mensagens foram devolvidas pelo BizTAlk, independentemente do que eu configurei no meu web.config
fonte
Consegui resolver isso executando uma chamada fictícia (por exemplo, IsAlive retornando true) pouco antes da solicitação com grande conteúdo no mesmo canal / cliente wcf. Aparentemente, a negociação de SSL é feita na primeira chamada. Portanto, não há necessidade de aumentar o tamanho do tamanho da fonte.
fonte
para emitir, o servidor remoto retornou uma resposta inesperada: (413) Solicitar entidade muito grande no WCF com resful
veja minha configuração de explicação
fonte
No meu caso, estava recebendo essa mensagem de erro porque havia alterado o espaço para nome do serviço e a tag services estava apontada para o espaço para nome mais antigo. Atualizei o espaço para nome e o erro desaparece:
fonte
Erro semelhante no IIS Express com o Visual Studio 2017.
Resolva isso editando
\.vs\config\applicationhost.config
. AlterneserverRuntime
deDeny
paraAllow
assim:Se esse valor não for editado, você receberá um erro como este ao definir
uploadReadAheadSize
:Em seguida, edite
Web.config
com os seguintes valores:fonte