Nelson Correia

.NET Thinking Machine

My Links

News

Search



Blog Stats

Archives

Post Categories

.NET

Links

Login
    u:
    p:
    Remember Me:
     

WCF, bindings and message size

Em WCF, quando definimos os bindings (quer declarativamente no ficheiro de configuração, ou programaticamente no código), existem muitas coisas que não especificamos, quer por estarmos satisfeitos com os valores que têm por omissão, quer por não estarmos preocupados com determinada definição, ou por outra razão qualquer.
 
Uma das definições diz respeito ao tamanho das mensagens recebidas. De modo a limitar a exposição a ataques DoS, o runtime WCF impõe um limite ao tamanho das mensagens que são recebidas e que consequentemente limita a quantidade de memória alocada para a recepção de mensagens. Esta definição está disponível declarativamente através de <binding maxReceivedMessageSize="..." > ou programaticamente na propriedade binding.MaxReceivedMessageSize e tem por omissão o valor de 64k.
 
Quando nos é enviada uma mensagem que excede este limite, a mensagem é rejeitada e o canal fica faulted, caso seja session-full. Mesmo quando utilizamos calbacks, caso este limite seja excedido o cliente é avisado recebendo uma CallbackException e sendo gerado o evento Faulted associado ao canal.
 
Para alguns bindings existe também a propriedade MaxBufferSize. Esta propriedade, para bindings com buffer é sempre igual a MaxReceivedMessageSize (o runtime lança excepção se não for) e para bindings streamed este valor limita o tamanho do header da mensagem (apenas o header necessita de ser bufferizado).
 
Caso estejamos a receber ou retornar XML em alguma operação exposta no contracto WCF, existe ainda outra propriedade à qual devemos ter atenção, MaxStringContentLength (disponível através de <binding> <readerQuotas maxStringContentLength="...">). Também por razões de segurança, esta propriedade limita o valor do buffer que é utilizado pelo XmlReader e por omissão o seu valor é de 8k. É preciso especial atenção a este valor, pois caso seja excedido, mas inferior a MaxReceivedMessageSize, o runtime não lança excepção, descartando a mensagem silenciosamente, sendo possível continuar a utilizar o mesmo canal.

posted on Monday, December 31, 2007 6:55 PM

Feedback

No comments posted yet
Title  
Name  
Url
Box Code
Protected by FormShield
Comments